order.schema.ts 2.6 KB

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