order.schema.ts 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. import { z } from 'zod';
  2. import { OrderStatus, PaymentStatus } from './order.entity';
  3. // 创建订单Schema
  4. export const OrderCreateSchema = z.object({
  5. userId: z.number().int().positive(),
  6. routeId: z.number().int().positive(),
  7. passengerCount: z.number().int().min(1),
  8. totalAmount: z.number().positive(),
  9. passengerSnapshots: z.array(z.any()),
  10. routeSnapshot: z.any(),
  11. createdBy: z.number().int().positive().optional()
  12. });
  13. // 更新订单Schema
  14. export const OrderUpdateSchema = z.object({
  15. status: z.nativeEnum(OrderStatus).optional(),
  16. paymentStatus: z.nativeEnum(PaymentStatus).optional(),
  17. updatedBy: z.number().int().positive().optional()
  18. });
  19. // 获取订单Schema
  20. export const OrderGetSchema = z.object({
  21. id: z.number().int().positive()
  22. });
  23. // 订单列表查询Schema
  24. export const OrderListSchema = z.object({
  25. page: z.number().int().positive().default(1),
  26. pageSize: z.number().int().positive().max(100).default(20),
  27. status: z.nativeEnum(OrderStatus).optional(),
  28. paymentStatus: z.nativeEnum(PaymentStatus).optional(),
  29. search: z.string().optional()
  30. });
  31. // 订单响应Schema
  32. export const OrderResponseSchema = z.object({
  33. id: z.number(),
  34. userId: z.number(),
  35. routeId: z.number(),
  36. passengerCount: z.number(),
  37. totalAmount: z.coerce.number(),
  38. status: z.nativeEnum(OrderStatus),
  39. paymentStatus: z.nativeEnum(PaymentStatus),
  40. passengerSnapshots: z.array(z.any()),
  41. routeSnapshot: z.any(),
  42. createdBy: z.number().nullable().optional(),
  43. updatedBy: z.number().nullable().optional(),
  44. createdAt: z.date(),
  45. updatedAt: z.date(),
  46. user: z.object({
  47. id: z.number(),
  48. username: z.string(),
  49. phone: z.string().nullable().optional()
  50. }).optional(),
  51. route: z.object({
  52. id: z.number(),
  53. name: z.string(),
  54. description: z.string().nullable().optional()
  55. }).optional()
  56. });
  57. // 订单统计Schema
  58. export const OrderStatsSchema = z.object({
  59. total: z.number(),
  60. pendingPayment: z.number(),
  61. waitingDeparture: z.number(),
  62. inProgress: z.number(),
  63. completed: z.number(),
  64. cancelled: z.number()
  65. });
  66. export type OrderCreateInput = z.infer<typeof OrderCreateSchema>;
  67. export type OrderUpdateInput = z.infer<typeof OrderUpdateSchema>;
  68. export type OrderGetInput = z.infer<typeof OrderGetSchema>;
  69. export type OrderListInput = z.infer<typeof OrderListSchema>;
  70. export type OrderResponse = z.infer<typeof OrderResponseSchema>;
  71. export type OrderStats = z.infer<typeof OrderStatsSchema>;