|
@@ -1,4 +1,6 @@
|
|
|
import { z } from '@hono/zod-openapi';
|
|
import { z } from '@hono/zod-openapi';
|
|
|
|
|
+import { UserSchema } from '@/server/modules/users/user.schema';
|
|
|
|
|
+import { UserCardSchema } from '@/server/modules/user-cards/user-card.schema';
|
|
|
|
|
|
|
|
// 基础用户卡余额记录Schema
|
|
// 基础用户卡余额记录Schema
|
|
|
const UserCardBalanceRecordSchema = z.object({
|
|
const UserCardBalanceRecordSchema = z.object({
|
|
@@ -14,15 +16,15 @@ const UserCardBalanceRecordSchema = z.object({
|
|
|
description: '卡号',
|
|
description: '卡号',
|
|
|
example: '12345678901234567890'
|
|
example: '12345678901234567890'
|
|
|
}),
|
|
}),
|
|
|
- amount: z.coerce.number().multipleOf(0.01).min(0).max(999999.99).openapi({
|
|
|
|
|
|
|
+ amount: z.coerce.number<number>().multipleOf(0.01).min(0).max(999999.99).openapi({
|
|
|
description: '变动金额',
|
|
description: '变动金额',
|
|
|
example: 50.50
|
|
example: 50.50
|
|
|
}),
|
|
}),
|
|
|
- amountBefore: z.coerce.number().multipleOf(0.01).min(0).max(999999.99).openapi({
|
|
|
|
|
|
|
+ amountBefore: z.coerce.number<number>().multipleOf(0.01).min(0).max(999999.99).openapi({
|
|
|
description: '变动前金额',
|
|
description: '变动前金额',
|
|
|
example: 100.00
|
|
example: 100.00
|
|
|
}),
|
|
}),
|
|
|
- amountAfter: z.coerce.number().multipleOf(0.01).min(0).max(999999.99).openapi({
|
|
|
|
|
|
|
+ amountAfter: z.coerce.number<number>().multipleOf(0.01).min(0).max(999999.99).openapi({
|
|
|
description: '变动后金额',
|
|
description: '变动后金额',
|
|
|
example: 150.50
|
|
example: 150.50
|
|
|
}),
|
|
}),
|
|
@@ -30,7 +32,7 @@ const UserCardBalanceRecordSchema = z.object({
|
|
|
description: '订单号',
|
|
description: '订单号',
|
|
|
example: 'ORD20240101120000'
|
|
example: 'ORD20240101120000'
|
|
|
}),
|
|
}),
|
|
|
- type: z.coerce.number().int().min(1).max(2).openapi({
|
|
|
|
|
|
|
+ type: z.coerce.number<number>().int().min(1).max(2).openapi({
|
|
|
description: '类型 1消费 2退款',
|
|
description: '类型 1消费 2退款',
|
|
|
example: 1
|
|
example: 1
|
|
|
}),
|
|
}),
|
|
@@ -53,7 +55,9 @@ const UserCardBalanceRecordSchema = z.object({
|
|
|
updatedAt: z.coerce.date().openapi({
|
|
updatedAt: z.coerce.date().openapi({
|
|
|
description: '更新时间',
|
|
description: '更新时间',
|
|
|
example: '2024-01-01T12:00:00Z'
|
|
example: '2024-01-01T12:00:00Z'
|
|
|
- })
|
|
|
|
|
|
|
+ }),
|
|
|
|
|
+ user: UserSchema.optional(),
|
|
|
|
|
+ userCard: UserCardSchema.optional()
|
|
|
});
|
|
});
|
|
|
|
|
|
|
|
// 创建用户卡余额记录DTO
|
|
// 创建用户卡余额记录DTO
|
|
@@ -67,13 +71,13 @@ export const CreateUserCardBalanceRecordDto = UserCardBalanceRecordSchema.pick({
|
|
|
type: true,
|
|
type: true,
|
|
|
remark: true
|
|
remark: true
|
|
|
}).extend({
|
|
}).extend({
|
|
|
- userId: z.coerce.number().int().positive('用户ID必须是正整数'),
|
|
|
|
|
|
|
+ userId: z.coerce.number<number>().int().positive('用户ID必须是正整数'),
|
|
|
cardNo: z.string().min(1, '卡号不能为空').max(20, '卡号最多20个字符'),
|
|
cardNo: z.string().min(1, '卡号不能为空').max(20, '卡号最多20个字符'),
|
|
|
- amount: z.coerce.number().multipleOf(0.01).min(0).max(999999.99),
|
|
|
|
|
- amountBefore: z.coerce.number().multipleOf(0.01).min(0).max(999999.99),
|
|
|
|
|
- amountAfter: z.coerce.number().multipleOf(0.01).min(0).max(999999.99),
|
|
|
|
|
|
|
+ amount: z.coerce.number<number>().multipleOf(0.01).min(0).max(999999.99),
|
|
|
|
|
+ amountBefore: z.coerce.number<number>().multipleOf(0.01).min(0).max(999999.99),
|
|
|
|
|
+ amountAfter: z.coerce.number<number>().multipleOf(0.01).min(0).max(999999.99),
|
|
|
orderNo: z.string().min(1, '订单号不能为空').max(32, '订单号最多32个字符'),
|
|
orderNo: z.string().min(1, '订单号不能为空').max(32, '订单号最多32个字符'),
|
|
|
- type: z.coerce.number().int().min(1).max(2),
|
|
|
|
|
|
|
+ type: z.coerce.number<number>().int().min(1).max(2),
|
|
|
remark: z.string().max(32, '备注最多32个字符').nullable()
|
|
remark: z.string().max(32, '备注最多32个字符').nullable()
|
|
|
});
|
|
});
|
|
|
|
|
|
|
@@ -88,28 +92,28 @@ export const UpdateUserCardBalanceRecordDto = UserCardBalanceRecordSchema.pick({
|
|
|
type: true,
|
|
type: true,
|
|
|
remark: true
|
|
remark: true
|
|
|
}).partial().extend({
|
|
}).partial().extend({
|
|
|
- userId: z.coerce.number().int().positive('用户ID必须是正整数').optional(),
|
|
|
|
|
|
|
+ userId: z.coerce.number<number>().int().positive('用户ID必须是正整数').optional(),
|
|
|
cardNo: z.string().min(1, '卡号不能为空').max(20, '卡号最多20个字符').optional(),
|
|
cardNo: z.string().min(1, '卡号不能为空').max(20, '卡号最多20个字符').optional(),
|
|
|
- amount: z.coerce.number().multipleOf(0.01).min(0).max(999999.99).optional(),
|
|
|
|
|
- amountBefore: z.coerce.number().multipleOf(0.01).min(0).max(999999.99).optional(),
|
|
|
|
|
- amountAfter: z.coerce.number().multipleOf(0.01).min(0).max(999999.99).optional(),
|
|
|
|
|
|
|
+ amount: z.coerce.number<number>().multipleOf(0.01).min(0).max(999999.99).optional(),
|
|
|
|
|
+ amountBefore: z.coerce.number<number>().multipleOf(0.01).min(0).max(999999.99).optional(),
|
|
|
|
|
+ amountAfter: z.coerce.number<number>().multipleOf(0.01).min(0).max(999999.99).optional(),
|
|
|
orderNo: z.string().min(1, '订单号不能为空').max(32, '订单号最多32个字符').optional(),
|
|
orderNo: z.string().min(1, '订单号不能为空').max(32, '订单号最多32个字符').optional(),
|
|
|
- type: z.coerce.number().int().min(1).max(2).optional(),
|
|
|
|
|
|
|
+ type: z.coerce.number<number>().int().min(1).max(2).optional(),
|
|
|
remark: z.string().max(32, '备注最多32个字符').nullable().optional()
|
|
remark: z.string().max(32, '备注最多32个字符').nullable().optional()
|
|
|
});
|
|
});
|
|
|
|
|
|
|
|
// 响应Schema(包含关联数据)
|
|
// 响应Schema(包含关联数据)
|
|
|
export const UserCardBalanceRecordResponseSchema = UserCardBalanceRecordSchema.extend({
|
|
export const UserCardBalanceRecordResponseSchema = UserCardBalanceRecordSchema.extend({
|
|
|
- user: z.object({
|
|
|
|
|
- id: z.number().int().positive(),
|
|
|
|
|
- username: z.string(),
|
|
|
|
|
- name: z.string().nullable(),
|
|
|
|
|
- phone: z.string().nullable()
|
|
|
|
|
|
|
+ user: UserSchema.pick({
|
|
|
|
|
+ id: true,
|
|
|
|
|
+ username: true,
|
|
|
|
|
+ name: true,
|
|
|
|
|
+ phone: true
|
|
|
}).optional(),
|
|
}).optional(),
|
|
|
- userCard: z.object({
|
|
|
|
|
- id: z.number().int().positive(),
|
|
|
|
|
- cardNo: z.string(),
|
|
|
|
|
- balance: z.number()
|
|
|
|
|
|
|
+ userCard: UserCardSchema.pick({
|
|
|
|
|
+ id: true,
|
|
|
|
|
+ cardNo: true,
|
|
|
|
|
+ balance: true
|
|
|
}).optional()
|
|
}).optional()
|
|
|
});
|
|
});
|
|
|
|
|
|