321 lines
9.2 KiB
TypeScript
321 lines
9.2 KiB
TypeScript
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);
|
|
}
|
|
}
|