--- description: "创建已有实体的schema指令" --- 按通用curd开发规范开发 检查已有实体类文件 your-entity.entity.ts 检查其关联的实体的 schema文件, 如 file.schema.ts、 user.schema.ts等 创建实体Zod Schema定义文件 your-entity.schema.ts 注意: 1. 将在当前实体中定义的枚举移到 your-entity.schema.ts 中定义 2. 为每个验证字段添加 中文错误提示 示例: ```typescript // 用户 schema export const UserSchema = z.object({ username: z.string().min(3, '用户名至少3个字符').max(255, '最多255个字符'), password: z.string().min(6, '密码至少6位').max(255, '最多255位'), phone: z.string().regex(/^1[3-9]\d{9}$/, '请输入正确的手机号'), email: z.email('请输入正确的邮箱格式'), name: z.string().max(255, '姓名最多255个字符').optional() }); 3. 有关联的实体,其 zod schema 要import 用上 示例: ```typescript import { ZichanCategorySchema } from './zichan-category.schema'; export const ZichanInfoSchema = z.object({ id: z.number().int('必须是整数').positive('必须是正整数').openapi({ description: '资产信息ID', example: 1 }), category: ZichanCategorySchema.nullable().openapi('设备分类信息'), }); ``` 4. 实体中import用到的枚举,your-entity.schema.ts 中也要import用上 示例: ```typescript // 教室状态枚举 export enum ClassroomStatus { CLOSED = 0, // 关闭 OPEN = 1 // 开放 } // 在当前zod v4中 z.enum 代替了 z.nativeEnum; z.object({ // z.enum(ClassroomStatus) 等价于 z.nativeEnum(ClassroomStatus), 不要 z.enum([ClassroomStatus.CLOSED, ClassroomStatus.OPEN]),应该是 z.enum(ClassroomStatus) z.enum(ClassroomStatus).nullable().openapi({ description: '状态 (0关闭 1开放)', example: ClassroomStatus.OPEN }), }) ``` 5. 在当前 zod v4中, z.coerce.date(), z.coerce.number() 等,都要添加类型泛型指定 示例: ```typescript z.coerce.date() z.coerce.number() ```