order-refund.schema.ts 4.9 KB

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