order-refund.schema.ts 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. import { z } from '@hono/zod-openapi';
  2. // 退款状态枚举
  3. export const RefundStatus = {
  4. PENDING: 0, // 未退款
  5. PROCESSING: 1, // 退款中
  6. SUCCESS: 2, // 退款成功
  7. FAILED: 3, // 退款失败
  8. } as const;
  9. // 订单退款基础Schema
  10. export const OrderRefundSchema = z.object({
  11. id: z.number().int().positive().openapi({
  12. description: '退款记录ID',
  13. example: 1
  14. }),
  15. orderNo: z.string().max(32, '订单号最多32个字符').nullable().optional().openapi({
  16. description: '订单号',
  17. example: 'ORD20240101123456'
  18. }),
  19. refundOrderNo: z.string().max(32, '退款订单号最多32个字符').nullable().optional().openapi({
  20. description: '退款订单号',
  21. example: 'REF20240101123456'
  22. }),
  23. refundAmount: z.coerce.number().min(0, '退款金额不能小于0').max(999999.99, '退款金额不能超过999999.99').nullable().optional().openapi({
  24. description: '退款金额',
  25. example: 99.99
  26. }),
  27. state: z.coerce.number().int().min(0, '状态最小为0').max(3, '状态最大为3').default(0).openapi({
  28. description: '0未退款1退款中2退款成功3退款失败',
  29. example: 0
  30. }),
  31. remark: z.string().max(255, '备注最多255个字符').nullable().optional().openapi({
  32. description: '备注',
  33. example: '用户申请退款'
  34. }),
  35. createdBy: z.number().int().positive().nullable().optional().openapi({
  36. description: '创建人ID',
  37. example: 1
  38. }),
  39. updatedBy: z.number().int().positive().nullable().optional().openapi({
  40. description: '更新人ID',
  41. example: 1
  42. }),
  43. createdAt: z.coerce.date().openapi({
  44. description: '创建时间',
  45. example: '2024-01-01T12:00:00Z'
  46. }),
  47. updatedAt: z.coerce.date().openapi({
  48. description: '更新时间',
  49. example: '2024-01-01T12:00:00Z'
  50. }),
  51. // 关联实体
  52. order: z.object({
  53. id: z.number().int().positive().openapi({ description: '订单ID' }),
  54. orderNo: z.string().openapi({ description: '订单号', example: 'ORD20240101123456' }),
  55. amount: z.number().openapi({ description: '订单金额', example: 99.99 })
  56. }).nullable().optional().openapi({
  57. description: '订单信息'
  58. })
  59. });
  60. // 创建订单退款DTO
  61. export const CreateOrderRefundDto = z.object({
  62. orderNo: z.string().max(32, '订单号最多32个字符').nullable().optional().openapi({
  63. description: '订单号',
  64. example: 'ORD20240101123456'
  65. }),
  66. refundOrderNo: z.string().max(32, '退款订单号最多32个字符').nullable().optional().openapi({
  67. description: '退款订单号',
  68. example: 'REF20240101123456'
  69. }),
  70. refundAmount: z.coerce.number().min(0, '退款金额不能小于0').max(999999.99, '退款金额不能超过999999.99').nullable().optional().openapi({
  71. description: '退款金额',
  72. example: 99.99
  73. }),
  74. state: z.coerce.number().int().min(0, '状态最小为0').max(3, '状态最大为3').default(0).optional().openapi({
  75. description: '0未退款1退款中2退款成功3退款失败',
  76. example: 0
  77. }),
  78. remark: z.string().max(255, '备注最多255个字符').nullable().optional().openapi({
  79. description: '备注',
  80. example: '用户申请退款'
  81. })
  82. });
  83. // 更新订单退款DTO
  84. export const UpdateOrderRefundDto = z.object({
  85. orderNo: z.string().max(32, '订单号最多32个字符').nullable().optional().openapi({
  86. description: '订单号',
  87. example: 'ORD20240101123456'
  88. }),
  89. refundOrderNo: z.string().max(32, '退款订单号最多32个字符').nullable().optional().openapi({
  90. description: '退款订单号',
  91. example: 'REF20240101123456'
  92. }),
  93. refundAmount: z.coerce.number().min(0, '退款金额不能小于0').max(999999.99, '退款金额不能超过999999.99').nullable().optional().openapi({
  94. description: '退款金额',
  95. example: 99.99
  96. }),
  97. state: z.coerce.number().int().min(0, '状态最小为0').max(3, '状态最大为3').optional().openapi({
  98. description: '0未退款1退款中2退款成功3退款失败',
  99. example: 2
  100. }),
  101. remark: z.string().max(255, '备注最多255个字符').nullable().optional().openapi({
  102. description: '备注',
  103. example: '退款已完成'
  104. })
  105. });
  106. // 订单退款列表响应
  107. export const OrderRefundListResponse = z.object({
  108. data: z.array(OrderRefundSchema),
  109. pagination: z.object({
  110. total: z.number().openapi({
  111. example: 100,
  112. description: '总记录数'
  113. }),
  114. current: z.number().openapi({
  115. example: 1,
  116. description: '当前页码'
  117. }),
  118. pageSize: z.number().openapi({
  119. example: 10,
  120. description: '每页数量'
  121. })
  122. })
  123. });