创建了完整的NestJS项目结构,包含配置文件、核心模块、工具类、拦截器、过滤器等基础代码,实现了健康检查、用户认证、管理员RBAC、剧集管理、订单支付、媒体管理等核心功能的基础框架,配置了ESLint、TypeScript、Jest等开发工具链。
88 lines
2.8 KiB
TypeScript
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,
|
|
});
|
|
}
|
|
}
|