import { Body, Controller, Get, Param, Put } from "@nestjs/common"; import { PreferencesService } from "./preferences.service.js"; import { updatePreferencesSchema } from "./preferences.dto.js"; import type { UpdatePreferencesDto } from "./preferences.dto.js"; import { Permissions, RequirePermission, } from "../middleware/permission.guard.js"; /** * PreferencesController —— 用户通知偏好 REST API。 * * 对齐 02-architecture-design.md §4.1: * - GET /preferences/user/:userId(查询偏好) * - PUT /preferences/user/:userId(更新偏好) */ @Controller("preferences") export class PreferencesController { constructor(private readonly service: PreferencesService) {} @Get("user/:userId") @RequirePermission(Permissions.MSG_NOTIFICATION_READ) async getByUserId( @Param("userId") userId: string, ): Promise<{ success: true; data: unknown }> { const preferences = await this.service.getByUserId(userId); return { success: true, data: { preferences } }; } @Put("user/:userId") @RequirePermission(Permissions.MSG_NOTIFICATION_MANAGE) async update( @Param("userId") userId: string, @Body() body: unknown, ): Promise<{ success: true }> { // body 来自 HTTP 请求体,类型为 unknown;转 Record 以便合并 userId(从 unknown 转换允许 as) const obj: Record = typeof body === "object" && body !== null ? (body as Record) : {}; const dto: UpdatePreferencesDto = updatePreferencesSchema.parse({ ...obj, userId, }); await this.service.update(dto); return { success: true }; } }