Files
cyh-tk-backend/src/modules/dramas/dramas.controller.ts
zhxiao1124 ef8c31d3be chore: 初始化TikTok短剧后端项目基础架构
创建了完整的NestJS项目结构,包含配置文件、核心模块、工具类、拦截器、过滤器等基础代码,实现了健康检查、用户认证、管理员RBAC、剧集管理、订单支付、媒体管理等核心功能的基础框架,配置了ESLint、TypeScript、Jest等开发工具链。
2026-07-01 13:55:37 +08:00

88 lines
2.8 KiB
TypeScript

import { Body, Controller, Get, Param, Patch, Post, Query, UseGuards } from '@nestjs/common';
import { ApiBearerAuth, ApiTags } from '@nestjs/swagger';
import { RequirePermissions } from '../admin/decorators/require-permissions.decorator';
import { AdminJwtAuthGuard } from '../admin/guards/admin-jwt-auth.guard';
import { PermissionsGuard } from '../admin/guards/permissions.guard';
import { CreateDramaDto } from './dto/create-drama.dto';
import { CreateEpisodeDto } from './dto/create-episode.dto';
import { DramasService } from './dramas.service';
import { PublishStatus } from './drama-status.enum';
@ApiTags('Dramas')
@Controller()
export class DramasController {
constructor(private readonly dramasService: DramasService) {}
@Post('/api/admin/v1/dramas')
@ApiBearerAuth()
@UseGuards(AdminJwtAuthGuard, PermissionsGuard)
@RequirePermissions('drama:create')
createDrama(@Body() dto: CreateDramaDto) {
return this.dramasService.createDrama(dto);
}
@Get('/api/admin/v1/dramas')
@ApiBearerAuth()
@UseGuards(AdminJwtAuthGuard, PermissionsGuard)
@RequirePermissions('drama:read')
listAdminDramas(@Query('page') page?: string, @Query('pageSize') pageSize?: string) {
return this.dramasService.listAdminDramas({
page: Number(page) || 1,
pageSize: Number(pageSize) || 20,
});
}
@Post('/api/admin/v1/episodes')
@ApiBearerAuth()
@UseGuards(AdminJwtAuthGuard, PermissionsGuard)
@RequirePermissions('episode:create')
createEpisode(@Body() dto: CreateEpisodeDto) {
return this.dramasService.createEpisode(dto);
}
@Post('/api/admin/v1/dramas/:id/submit-review')
@ApiBearerAuth()
@UseGuards(AdminJwtAuthGuard, PermissionsGuard)
@RequirePermissions('drama:update')
submitReview(@Param('id') id: string) {
return this.dramasService.submitReview(Number(id));
}
@Patch('/api/admin/v1/episodes/:id/publish-status')
@ApiBearerAuth()
@UseGuards(AdminJwtAuthGuard, PermissionsGuard)
@RequirePermissions('episode:update')
updatePublishStatus(
@Param('id') id: string,
@Body() dto: { publishStatus: PublishStatus },
) {
return this.dramasService.updateEpisodePublishStatus(
Number(id),
dto.publishStatus,
);
}
@Get('/api/app/v1/dramas')
listPublishedDramas(
@Query('page') page?: string,
@Query('pageSize') pageSize?: string,
) {
return this.dramasService.listPublishedDramas({
page: Number(page) || 1,
pageSize: Number(pageSize) || 20,
});
}
@Get('/api/app/v1/dramas/:id/episodes')
listPublishedEpisodes(
@Param('id') id: string,
@Query('page') page?: string,
@Query('pageSize') pageSize?: string,
) {
return this.dramasService.listPublishedEpisodes(Number(id), {
page: Number(page) || 1,
pageSize: Number(pageSize) || 20,
});
}
}