---
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<Date>()
    z.coerce.number<number>()
    ```