// services/api/src/interactions/dto.ts —— 互动上报请求体(P2 Task 7 点赞批次 / // Task 8 浏览上报)。校验边界与契约 LikeBatchRequest / VisitReportRequest // 逐字段对齐(sessionId/batchId 1..64、delta 1..20 整数;visitorId/requestId // 8..128);越界一律 400 VALIDATION_FAILED(全局 ValidationPipe whitelist // 剥离未声明字段)。delta 必须是 JSON number 整数(管道未开 transform, // 字符串数字不静默转换——公开匿名端点从严)。 import { IsInt, IsString, Length, Max, Min } from 'class-validator'; export class LikeBatchDto { /** 会话标识(客户端随机生成、会话期间复用;限速滑窗的键之一)。 */ @IsString() @Length(1, 64) sessionId!: string; /** 批次幂等键:同批失败重试必须复用,跨批次不得复用。 */ @IsString() @Length(1, 64) batchId!: string; /** 本批新增点赞数(客户端短窗合并后的累计点击数)。 */ @IsInt() @Min(1) @Max(20) delta!: number; } /** 浏览上报请求体(P2 Task 8;契约 VisitReportRequest)。 */ export class VisitReportDto { /** 访客标识(客户端持久化并在标签页间共享;去重窗口与限速的键)。 */ @IsString() @Length(8, 128) visitorId!: string; /** 上报幂等键:counted 确认前跨刷新/重试持久复用(建议 UUID)。 */ @IsString() @Length(8, 128) requestId!: string; }