generic-crud-创建实体验证规则.md 2.1 KB


description: "创建已有实体的schema指令"

按通用curd开发规范开发

检查已有实体类文件 your-entity.entity.ts 检查其关联的实体的 schema文件 创建实体Zod Schema定义文件 your-entity.schema.ts

注意:

  1. 将在当前实体中定义的枚举移到 your-entity.schema.ts 中定义
  2. 为每个验证字段添加 中文错误提示

    示例:

    // 用户 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() ```