|
@@ -79,7 +79,7 @@ import { z } from '@hono/zod-openapi';
|
|
|
|
|
|
|
|
// 实体完整Schema(用于响应)
|
|
// 实体完整Schema(用于响应)
|
|
|
export const YourEntitySchema = z.object({
|
|
export const YourEntitySchema = z.object({
|
|
|
- id: z.coerce.number().int('必须是整数').positive('必须是正整数').openapi({
|
|
|
|
|
|
|
+ id: z.coerce.number<number>().int('必须是整数').positive('必须是正整数').openapi({
|
|
|
description: '实体ID',
|
|
description: '实体ID',
|
|
|
example: 1
|
|
example: 1
|
|
|
}),
|
|
}),
|
|
@@ -91,15 +91,15 @@ export const YourEntitySchema = z.object({
|
|
|
description: '实体描述',
|
|
description: '实体描述',
|
|
|
example: '这是一个示例描述'
|
|
example: '这是一个示例描述'
|
|
|
}),
|
|
}),
|
|
|
- isDisabled: z.coerce.number().int('必须是整数').min(0, '最小值为0').max(1, '最大值为1').openapi({
|
|
|
|
|
|
|
+ isDisabled: z.coerce.number<number>().int('必须是整数').min(0, '最小值为0').max(1, '最大值为1').openapi({
|
|
|
description: '禁用状态 (0启用 1禁用)',
|
|
description: '禁用状态 (0启用 1禁用)',
|
|
|
example: 0
|
|
example: 0
|
|
|
}),
|
|
}),
|
|
|
- createdAt: z.coerce.date('创建时间格式不正确').openapi({
|
|
|
|
|
|
|
+ createdAt: z.coerce.date<Date>('创建时间格式不正确').openapi({
|
|
|
description: '创建时间',
|
|
description: '创建时间',
|
|
|
example: '2023-10-01T12:00:00Z'
|
|
example: '2023-10-01T12:00:00Z'
|
|
|
}),
|
|
}),
|
|
|
- updatedAt: z.coerce.date('更新时间格式不正确').openapi({
|
|
|
|
|
|
|
+ updatedAt: z.coerce.date<Date>('更新时间格式不正确').openapi({
|
|
|
description: '更新时间',
|
|
description: '更新时间',
|
|
|
example: '2023-10-01T12:00:00Z'
|
|
example: '2023-10-01T12:00:00Z'
|
|
|
})
|
|
})
|
|
@@ -115,7 +115,7 @@ export const CreateYourEntityDto = z.object({
|
|
|
description: '实体描述(选填)',
|
|
description: '实体描述(选填)',
|
|
|
example: '这是一个示例描述'
|
|
example: '这是一个示例描述'
|
|
|
}),
|
|
}),
|
|
|
- isDisabled: z.coerce.number().int('必须是整数').min(0, '最小值为0').max(1, '最大值为1').default(0).openapi({
|
|
|
|
|
|
|
+ isDisabled: z.coerce.number<number>().int('必须是整数').min(0, '最小值为0').max(1, '最大值为1').default(0).openapi({
|
|
|
description: '禁用状态 (0启用 1禁用)',
|
|
description: '禁用状态 (0启用 1禁用)',
|
|
|
example: 0
|
|
example: 0
|
|
|
})
|
|
})
|
|
@@ -131,7 +131,7 @@ export const UpdateYourEntityDto = z.object({
|
|
|
description: '实体描述',
|
|
description: '实体描述',
|
|
|
example: '更新后的描述'
|
|
example: '更新后的描述'
|
|
|
}),
|
|
}),
|
|
|
- isDisabled: z.coerce.number().int('必须是整数').min(0, '最小值为0').max(1, '最大值为1').optional().openapi({
|
|
|
|
|
|
|
+ isDisabled: z.coerce.number<number>().int('必须是整数').min(0, '最小值为0').max(1, '最大值为1').optional().openapi({
|
|
|
description: '禁用状态 (0启用 1禁用)',
|
|
description: '禁用状态 (0启用 1禁用)',
|
|
|
example: 1
|
|
example: 1
|
|
|
})
|
|
})
|
|
@@ -310,9 +310,9 @@ description?: string;
|
|
|
✅ **状态字段**: 使用tinyint类型,明确取值含义
|
|
✅ **状态字段**: 使用tinyint类型,明确取值含义
|
|
|
|
|
|
|
|
### 2. Zod Schema规范(基于 .roo/rules/10-entity.md)
|
|
### 2. Zod Schema规范(基于 .roo/rules/10-entity.md)
|
|
|
-✅ **数字类型转换**: 必须使用 `z.coerce.number()`
|
|
|
|
|
-✅ **日期类型转换**: 必须使用 `z.coerce.date()`
|
|
|
|
|
-✅ **布尔类型转换**: 必须使用 `z.coerce.boolean()`
|
|
|
|
|
|
|
+✅ **数字类型转换**: 必须使用 `z.coerce.number<number>()`
|
|
|
|
|
+✅ **日期类型转换**: 必须使用 `z.coerce.date<Date>()`
|
|
|
|
|
+✅ **布尔类型转换**: 必须使用 `z.coerce.boolean<boolean>()`
|
|
|
✅ **OpenAPI元数据**: 必须包含description和example
|
|
✅ **OpenAPI元数据**: 必须包含description和example
|
|
|
|
|
|
|
|
### 3. RPC调用规范(基于 .roo/rules/08-rpc.md)
|
|
### 3. RPC调用规范(基于 .roo/rules/08-rpc.md)
|
|
@@ -370,9 +370,9 @@ InferResponseType<typeof client[':id'].$get, 200>
|
|
|
|
|
|
|
|
### Zod Schema检查
|
|
### Zod Schema检查
|
|
|
✅ Schema验证规则完善
|
|
✅ Schema验证规则完善
|
|
|
-✅ 数字类型使用 `z.coerce.number()`
|
|
|
|
|
-✅ 日期类型使用 `z.coerce.date()`
|
|
|
|
|
-✅ 布尔类型使用 `z.coerce.boolean()`
|
|
|
|
|
|
|
+✅ 数字类型使用 `z.coerce.number<number>()`
|
|
|
|
|
+✅ 日期类型使用 `z.coerce.date<Date>()`
|
|
|
|
|
+✅ 布尔类型使用 `z.coerce.boolean<boolean>()`
|
|
|
✅ 所有Schema包含OpenAPI元数据(description/example)
|
|
✅ 所有Schema包含OpenAPI元数据(description/example)
|
|
|
|
|
|
|
|
### 项目规范合规性
|
|
### 项目规范合规性
|