import { Body, Controller, Get, Inject, Param, Patch, Post, Query, UseGuards } from '@nestjs/common'; import type { AuthRequestUser } from '../auth/auth.types'; import { CurrentUser } from '../auth/current-user.decorator'; import { JwtAuthGuard } from '../auth/jwt-auth.guard'; import { AdminListAssetsQueryDto, AdminListCharactersQueryDto, AdminListCopyrightRecordsQueryDto, AdminListGlobalCharactersQueryDto, AdminListHitAnalysesQueryDto, AdminListNovelChaptersQueryDto, AdminListNovelSourcesQueryDto, AdminListOperationLogsQueryDto, AdminBindCharacterGlobalDto, AdminAnalyzeHitCaseDto, AdminCreateHitAnalysisCaseDto, AdminListProjectsQueryDto, AdminListRouterAuditsQueryDto, AdminListStoryboardShotsQueryDto, AdminListUsersQueryDto, AdminListWorksQueryDto, AdminListCreativePatternsQueryDto, AdminPromoteHitCasePatternsDto, AdminResetUserPasswordDto, AdminSaveGlobalCharacterDto, AdminUpdateRouterAuditQualityDto, AdminUpdateCreativePatternDto, AdminUpdateCreativePatternStatusDto, AdminUpdateProjectStatusDto, AdminUpdateUserRoleDto, AdminUpdateUserStatusDto, AdminUpdateSystemConfigDto } from './admin.dto'; import { AdminService } from './admin.service'; @Controller('admin') @UseGuards(JwtAuthGuard) export class AdminController { constructor(@Inject(AdminService) private readonly adminService: AdminService) {} @Get('dashboard') getDashboard(@CurrentUser() user: AuthRequestUser) { return this.adminService.getDashboard(user); } @Get('rbac/me') getRbacProfile(@CurrentUser() user: AuthRequestUser) { return this.adminService.getRbacProfile(user); } @Get('projects') listProjects(@CurrentUser() user: AuthRequestUser, @Query() query: AdminListProjectsQueryDto) { return this.adminService.listProjects(user, query); } @Get('projects/:projectId') getProjectDetail(@CurrentUser() user: AuthRequestUser, @Param('projectId') projectId: string) { return this.adminService.getProjectDetail(user, projectId); } @Patch('projects/:projectId/status') updateProjectStatus( @CurrentUser() user: AuthRequestUser, @Param('projectId') projectId: string, @Body() dto: AdminUpdateProjectStatusDto ) { return this.adminService.updateProjectStatus(user, projectId, dto); } @Get('users') listUsers(@CurrentUser() user: AuthRequestUser, @Query() query: AdminListUsersQueryDto) { return this.adminService.listUsers(user, query); } @Get('users/:userId/detail') getUserDetail(@CurrentUser() user: AuthRequestUser, @Param('userId') userId: string) { return this.adminService.getUserDetail(user, userId); } @Patch('users/:userId/status') updateUserStatus( @CurrentUser() user: AuthRequestUser, @Param('userId') userId: string, @Body() dto: AdminUpdateUserStatusDto ) { return this.adminService.updateUserStatus(user, userId, dto); } @Patch('users/:userId/role') updateUserRole( @CurrentUser() user: AuthRequestUser, @Param('userId') userId: string, @Body() dto: AdminUpdateUserRoleDto ) { return this.adminService.updateUserRole(user, userId, dto); } @Post('users/:userId/reset-password') resetUserPassword( @CurrentUser() user: AuthRequestUser, @Param('userId') userId: string, @Body() dto: AdminResetUserPasswordDto ) { return this.adminService.resetUserPassword(user, userId, dto); } @Get('assets') listAssets(@CurrentUser() user: AuthRequestUser, @Query() query: AdminListAssetsQueryDto) { return this.adminService.listAssets(user, query); } @Get('novel-sources') listNovelSources( @CurrentUser() user: AuthRequestUser, @Query() query: AdminListNovelSourcesQueryDto ) { return this.adminService.listNovelSources(user, query); } @Get('novel-chapters') listNovelChapters( @CurrentUser() user: AuthRequestUser, @Query() query: AdminListNovelChaptersQueryDto ) { return this.adminService.listNovelChapters(user, query); } @Get('characters') listCharacters(@CurrentUser() user: AuthRequestUser, @Query() query: AdminListCharactersQueryDto) { return this.adminService.listCharacters(user, query); } @Get('global-characters') listGlobalCharacters( @CurrentUser() user: AuthRequestUser, @Query() query: AdminListGlobalCharactersQueryDto ) { return this.adminService.listGlobalCharacters(user, query); } @Post('global-characters') createGlobalCharacter( @CurrentUser() user: AuthRequestUser, @Body() dto: AdminSaveGlobalCharacterDto ) { return this.adminService.createGlobalCharacter(user, dto); } @Patch('global-characters/:globalCharacterId') updateGlobalCharacter( @CurrentUser() user: AuthRequestUser, @Param('globalCharacterId') globalCharacterId: string, @Body() dto: AdminSaveGlobalCharacterDto ) { return this.adminService.updateGlobalCharacter(user, globalCharacterId, dto); } @Post('characters/:characterId/bind-global') bindCharacterGlobal( @CurrentUser() user: AuthRequestUser, @Param('characterId') characterId: string, @Body() dto: AdminBindCharacterGlobalDto ) { return this.adminService.bindCharacterGlobal(user, characterId, dto); } @Get('storyboard-shots') listStoryboardShots( @CurrentUser() user: AuthRequestUser, @Query() query: AdminListStoryboardShotsQueryDto ) { return this.adminService.listStoryboardShots(user, query); } @Get('router-audits') listRouterAudits( @CurrentUser() user: AuthRequestUser, @Query() query: AdminListRouterAuditsQueryDto ) { return this.adminService.listRouterAudits(user, query); } @Get('hit-analyses') listHitAnalyses( @CurrentUser() user: AuthRequestUser, @Query() query: AdminListHitAnalysesQueryDto ) { return this.adminService.listHitAnalyses(user, query); } @Post('hit-analyses') createHitAnalysisCase( @CurrentUser() user: AuthRequestUser, @Body() dto: AdminCreateHitAnalysisCaseDto ) { return this.adminService.createHitAnalysisCase(user, dto); } @Post('hit-analyses/:caseId/analyze') analyzeHitCase( @CurrentUser() user: AuthRequestUser, @Param('caseId') caseId: string, @Body() dto: AdminAnalyzeHitCaseDto ) { return this.adminService.analyzeHitCase(user, caseId, dto); } @Post('hit-analyses/:caseId/patterns') promoteHitCasePatterns( @CurrentUser() user: AuthRequestUser, @Param('caseId') caseId: string, @Body() dto: AdminPromoteHitCasePatternsDto ) { return this.adminService.promoteHitCasePatterns(user, caseId, dto); } @Get('creative-patterns') listCreativePatterns( @CurrentUser() user: AuthRequestUser, @Query() query: AdminListCreativePatternsQueryDto ) { return this.adminService.listCreativePatterns(user, query); } @Patch('creative-patterns/:patternId') updateCreativePattern( @CurrentUser() user: AuthRequestUser, @Param('patternId') patternId: string, @Body() dto: AdminUpdateCreativePatternDto ) { return this.adminService.updateCreativePattern(user, patternId, dto); } @Patch('creative-patterns/:patternId/status') updateCreativePatternStatus( @CurrentUser() user: AuthRequestUser, @Param('patternId') patternId: string, @Body() dto: AdminUpdateCreativePatternStatusDto ) { return this.adminService.updateCreativePatternStatus(user, patternId, dto); } @Post('creative-patterns/:patternId/refresh-metrics') refreshCreativePatternMetrics( @CurrentUser() user: AuthRequestUser, @Param('patternId') patternId: string ) { return this.adminService.refreshCreativePatternMetrics(user, patternId); } @Get('router-audits/video-clips/:clipId/timeline') getRouterAuditClipTimeline( @CurrentUser() user: AuthRequestUser, @Param('clipId') clipId: string ) { return this.adminService.getRouterAuditClipTimeline(user, clipId); } @Patch('router-audits/video-clips/:clipId/quality') updateRouterAuditClipQuality( @CurrentUser() user: AuthRequestUser, @Param('clipId') clipId: string, @Body() dto: AdminUpdateRouterAuditQualityDto ) { return this.adminService.updateRouterAuditClipQuality(user, clipId, dto); } @Get('works') listWorks(@CurrentUser() user: AuthRequestUser, @Query() query: AdminListWorksQueryDto) { return this.adminService.listWorks(user, query); } @Get('copyright-records') listCopyrightRecords( @CurrentUser() user: AuthRequestUser, @Query() query: AdminListCopyrightRecordsQueryDto ) { return this.adminService.listCopyrightRecords(user, query); } @Get('operation-logs') listOperationLogs( @CurrentUser() user: AuthRequestUser, @Query() query: AdminListOperationLogsQueryDto ) { return this.adminService.listOperationLogs(user, query); } @Get('operation-logs/export') exportOperationLogs( @CurrentUser() user: AuthRequestUser, @Query() query: AdminListOperationLogsQueryDto ) { return this.adminService.exportOperationLogs(user, query); } @Get('system-configs') listSystemConfigs(@CurrentUser() user: AuthRequestUser) { return this.adminService.listSystemConfigs(user); } @Patch('system-configs/:configKey') updateSystemConfig( @CurrentUser() user: AuthRequestUser, @Param('configKey') configKey: string, @Body() dto: AdminUpdateSystemConfigDto ) { return this.adminService.updateSystemConfig(user, configKey, dto); } }