create-order.schema.ts 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. import { z } from '@hono/zod-openapi';
  2. // 订单商品项DTO
  3. export const OrderItemDto = z.object({
  4. id: z.number().int().positive('商品ID必须是正整数').openapi({
  5. description: '商品ID',
  6. example: 1
  7. }),
  8. num: z.number().int().min(1, '购买数量必须大于0').openapi({
  9. description: '购买数量',
  10. example: 2
  11. })
  12. });
  13. // 创建订单请求DTO
  14. export const CreateOrderRequestDto = z.object({
  15. addressId: z.number().int().positive('收货地址ID必须是正整数').optional().openapi({
  16. description: '收货地址ID',
  17. example: 1
  18. }),
  19. productOwn: z.string().min(1, '商品所属方不能为空').max(50, '商品所属方最多50个字符').openapi({
  20. description: '商品所属方(如:自营、第三方等)',
  21. example: '自营'
  22. }),
  23. consumeFrom: z.string().min(1, '消费来源不能为空').max(50, '消费来源最多50个字符').openapi({
  24. description: '消费来源(如:积分兑换、礼券兑换等)',
  25. example: '积分兑换'
  26. }),
  27. products: z.array(OrderItemDto).min(1, '商品列表不能为空').openapi({
  28. description: '商品列表',
  29. example: [{ id: 1, num: 2 }, { id: 3, num: 1 }]
  30. })
  31. });
  32. // 创建订单响应DTO
  33. export const CreateOrderResponseDto = z.object({
  34. success: z.boolean().openapi({
  35. description: '是否成功',
  36. example: true
  37. }),
  38. orderId: z.number().int().positive().openapi({
  39. description: '订单ID',
  40. example: 1001
  41. }),
  42. orderNo: z.string().openapi({
  43. description: '订单号',
  44. example: 'ORD20240101123456'
  45. }),
  46. amount: z.number().openapi({
  47. description: '订单总金额',
  48. example: 199.98
  49. }),
  50. payAmount: z.number().openapi({
  51. description: '实际支付金额',
  52. example: 199.98
  53. }),
  54. message: z.string().openapi({
  55. description: '提示信息',
  56. example: '订单创建成功'
  57. })
  58. });
  59. // 导出类型
  60. export type CreateOrderRequest = z.infer<typeof CreateOrderRequestDto>;
  61. export type CreateOrderResponse = z.infer<typeof CreateOrderResponseDto>;
  62. export type OrderItem = z.infer<typeof OrderItemDto>;