Files
plp/apps/api/src/admin/admin.controller.ts
T
root fa0fa78312 fix(治理): 完成任务 8 安全与通知闭环修复
- 串行化拉黑、处罚、投瓶和匹配策略检查\n- 完成异步站内通知、未读统计和偏好并发语义\n- 补齐后台查询审计、处罚恢复和隐私测试\n- 稳定 Redis 恢复、匹配锁序及超时测试
2026-09-17 13:08:55 +08:00

95 lines
2.4 KiB
TypeScript

import {
Body,
Controller,
Get,
Inject,
Param,
ParseUUIDPipe,
Post,
Query,
UseGuards,
} from "@nestjs/common";
import { AuthGuard } from "../auth/auth.guard.js";
import { CurrentUser } from "../auth/current-user.decorator.js";
import type { AccessClaims } from "../auth/token.service.js";
import { StateChangingOriginGuard } from "../conversation/state-changing-origin.guard.js";
import { AdminGuard } from "./admin.guard.js";
import { AdminService } from "./admin.service.js";
import {
AdminQueryDto,
ModerateDto,
ResolveReportDto,
SanctionDto,
} from "./dto.js";
@Controller("admin")
@UseGuards(AuthGuard, AdminGuard)
export class AdminController {
constructor(@Inject(AdminService) private readonly admin: AdminService) {}
@Get("reports") reports(
@CurrentUser() u: AccessClaims,
@Query() q: AdminQueryDto,
) {
return this.admin.reports(u.sub, q.status, q.limit);
}
@UseGuards(StateChangingOriginGuard) @Post("reports/:id/resolve") resolve(
@CurrentUser() u: AccessClaims,
@Param("id", new ParseUUIDPipe()) id: string,
@Body() d: ResolveReportDto,
) {
return this.admin.resolve(u.sub, id, d);
}
@Get("moderation") moderation(
@CurrentUser() u: AccessClaims,
@Query() q: AdminQueryDto,
) {
return this.admin.moderation(u.sub, q.limit);
}
@UseGuards(StateChangingOriginGuard) @Post("moderation/:id/resolve") moderate(
@CurrentUser() u: AccessClaims,
@Param("id", new ParseUUIDPipe()) id: string,
@Body() d: ModerateDto,
) {
return this.admin.moderate(u.sub, id, d.decision, d.reason);
}
@UseGuards(StateChangingOriginGuard)
@Post("accounts/:publicId/sanctions")
sanction(
@CurrentUser() u: AccessClaims,
@Param("publicId", new ParseUUIDPipe()) id: string,
@Body() d: SanctionDto,
) {
return this.admin.sanctions(u.sub, id, d);
}
}
Reflect.defineMetadata(
"design:paramtypes",
[Object, AdminQueryDto],
AdminController.prototype,
"reports",
);
Reflect.defineMetadata(
"design:paramtypes",
[Object, String, ResolveReportDto],
AdminController.prototype,
"resolve",
);
Reflect.defineMetadata(
"design:paramtypes",
[Object, AdminQueryDto],
AdminController.prototype,
"moderation",
);
Reflect.defineMetadata(
"design:paramtypes",
[Object, String, ModerateDto],
AdminController.prototype,
"moderate",
);
Reflect.defineMetadata(
"design:paramtypes",
[Object, String, SanctionDto],
AdminController.prototype,
"sanction",
);