library-picturebook-activity/backend/src/public/content-review.controller.ts

122 lines
3.3 KiB
TypeScript
Raw Normal View History

import {
Controller, Get, Post, Param, Query, Body,
ParseIntPipe, UseGuards, Request,
} from '@nestjs/common';
import { JwtAuthGuard } from '../auth/guards/jwt-auth.guard';
import { ContentReviewService } from './content-review.service';
@Controller('content-review')
@UseGuards(JwtAuthGuard)
export class ContentReviewController {
constructor(private readonly reviewService: ContentReviewService) {}
// ========== 作品审核 ==========
@Get('works/stats')
getWorkStats() {
return this.reviewService.getWorkStats();
}
@Get('works')
getWorkQueue(
@Query('page') page?: string,
@Query('pageSize') pageSize?: string,
@Query('status') status?: string,
@Query('keyword') keyword?: string,
@Query('startTime') startTime?: string,
@Query('endTime') endTime?: string,
@Query('sortBy') sortBy?: string,
@Query('isRecommended') isRecommended?: string,
) {
return this.reviewService.getWorkQueue({
page: page ? parseInt(page) : 1,
pageSize: pageSize ? parseInt(pageSize) : 10,
status,
keyword,
startTime,
endTime,
sortBy,
isRecommended: isRecommended === '1',
});
}
@Get('works/:id')
getWorkDetail(@Param('id', ParseIntPipe) id: number) {
return this.reviewService.getWorkDetail(id);
}
@Post('works/batch-approve')
batchApprove(@Request() req, @Body() dto: { ids: number[] }) {
return this.reviewService.batchApprove(dto.ids || [], req.user.userId);
}
@Post('works/batch-reject')
batchReject(@Request() req, @Body() dto: { ids: number[]; reason: string }) {
return this.reviewService.batchReject(dto.ids || [], req.user.userId, dto.reason);
}
@Post('works/:id/approve')
approveWork(
@Param('id', ParseIntPipe) id: number,
@Request() req,
@Body() dto: { note?: string },
) {
return this.reviewService.approve(id, req.user.userId, dto.note);
}
@Post('works/:id/reject')
rejectWork(
@Param('id', ParseIntPipe) id: number,
@Request() req,
@Body() dto: { reason: string; note?: string },
) {
return this.reviewService.reject(id, req.user.userId, dto.reason, dto.note);
}
@Post('works/:id/revoke')
revokeWork(@Param('id', ParseIntPipe) id: number, @Request() req) {
return this.reviewService.revoke(id, req.user.userId);
}
@Post('works/:id/takedown')
takedownWork(
@Param('id', ParseIntPipe) id: number,
@Request() req,
@Body() dto: { reason: string },
) {
return this.reviewService.takedown(id, req.user.userId, dto.reason);
}
@Post('works/:id/restore')
restoreWork(@Param('id', ParseIntPipe) id: number, @Request() req) {
return this.reviewService.restore(id, req.user.userId);
}
@Post('works/:id/recommend')
toggleRecommend(@Param('id', ParseIntPipe) id: number) {
return this.reviewService.toggleRecommend(id);
}
// ========== 作品管理 ==========
@Get('management/stats')
getManagementStats() {
return this.reviewService.getManagementStats();
}
// ========== 审核日志 ==========
@Get('logs')
getLogs(
@Query('page') page?: string,
@Query('pageSize') pageSize?: string,
@Query('workId') workId?: string,
) {
return this.reviewService.getLogs({
page: page ? parseInt(page) : 1,
pageSize: pageSize ? parseInt(pageSize) : 20,
workId: workId ? parseInt(workId) : undefined,
});
}
}