/** * 用户相关的 Valibot 验证模式 * User-related Valibot validation schemas */ import * as v from 'valibot' /** * 基础用户验证模式 * Base user validation schema */ export const BaseUserSchema = v.object({ name: v.pipe( v.string('姓名必须是字符串'), v.trim(), v.minLength(2, '姓名至少需要2个字符'), v.maxLength(50, '姓名不能超过50个字符'), v.nonEmpty('姓名不能为空') ), email: v.pipe( v.string('邮箱必须是字符串'), v.trim(), v.email('请输入有效的邮箱地址'), v.maxLength(100, '邮箱不能超过100个字符') ), age: v.optional( v.pipe( v.number('年龄必须是数字'), v.integer('年龄必须是整数'), v.minValue(1, '年龄不能小于1岁'), v.maxValue(150, '年龄不能超过150岁') ) ), }) /** * 创建用户验证模式 * Create user validation schema */ export const CreateUserSchema = BaseUserSchema /** * 更新用户验证模式 - 所有字段都是可选的 * Update user validation schema - all fields are optional */ export const UpdateUserSchema = v.object({ name: v.optional( v.pipe( v.string('姓名必须是字符串'), v.trim(), v.minLength(2, '姓名至少需要2个字符'), v.maxLength(50, '姓名不能超过50个字符'), v.nonEmpty('姓名不能为空') ) ), email: v.optional( v.pipe( v.string('邮箱必须是字符串'), v.trim(), v.email('请输入有效的邮箱地址'), v.maxLength(100, '邮箱不能超过100个字符') ) ), age: v.optional( v.pipe( v.number('年龄必须是数字'), v.integer('年龄必须是整数'), v.minValue(1, '年龄不能小于1岁'), v.maxValue(150, '年龄不能超过150岁') ) ), }) /** * 用户查询参数验证模式 * User query parameters validation schema */ export const UserQuerySchema = v.object({ page: v.optional( v.pipe(v.number('页码必须是数字'), v.integer('页码必须是整数'), v.minValue(1, '页码不能小于1')), 1 ), limit: v.optional( v.pipe( v.number('每页数量必须是数字'), v.integer('每页数量必须是整数'), v.minValue(1, '每页数量不能小于1'), v.maxValue(100, '每页数量不能超过100') ), 10 ), search: v.optional( v.pipe( v.string('搜索关键词必须是字符串'), v.trim(), v.maxLength(100, '搜索关键词不能超过100个字符') ) ), minAge: v.optional( v.pipe( v.number('最小年龄必须是数字'), v.integer('最小年龄必须是整数'), v.minValue(1, '最小年龄不能小于1岁') ) ), maxAge: v.optional( v.pipe( v.number('最大年龄必须是数字'), v.integer('最大年龄必须是整数'), v.maxValue(150, '最大年龄不能超过150岁') ) ), }) /** * 邮箱查询验证模式 * Email query validation schema */ export const EmailQuerySchema = v.object({ email: v.pipe( v.string('邮箱必须是字符串'), v.trim(), v.email('请输入有效的邮箱地址'), v.nonEmpty('邮箱不能为空') ), }) /** * ID 参数验证模式 * ID parameter validation schema */ export const UserIdSchema = v.object({ id: v.pipe( v.number('用户ID必须是数字'), v.integer('用户ID必须是整数'), v.minValue(1, '用户ID必须大于0') ), }) // 导出类型推断 export type CreateUserInput = v.InferInput export type UpdateUserInput = v.InferInput export type UserQueryParams = v.InferInput export type EmailQuery = v.InferInput export type UserIdParams = v.InferInput