fa0fa78312
- 串行化拉黑、处罚、投瓶和匹配策略检查\n- 完成异步站内通知、未读统计和偏好并发语义\n- 补齐后台查询审计、处罚恢复和隐私测试\n- 稳定 Redis 恢复、匹配锁序及超时测试
95 lines
2.4 KiB
TypeScript
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",
|
|
);
|