/** * Orders Domain - Schemas * * Zod schemas for runtime validation of order data. */ import { z } from "zod"; // ============================================================================ // Fulfillment Order Schemas // ============================================================================ export const fulfillmentOrderProductSchema = z.object({ id: z.string().optional(), sku: z.string().optional(), name: z.string().optional(), itemClass: z.string().optional(), whmcsProductId: z.string().optional(), billingCycle: z.string().optional(), }); export const fulfillmentOrderItemSchema = z.object({ id: z.string(), orderId: z.string(), quantity: z.number().int().min(1), product: fulfillmentOrderProductSchema.nullable(), }); export const fulfillmentOrderDetailsSchema = z.object({ id: z.string(), orderNumber: z.string().optional(), orderType: z.string().optional(), items: z.array(fulfillmentOrderItemSchema), }); // ============================================================================ // Order Item Summary Schema // ============================================================================ export const orderItemSummarySchema = z.object({ productName: z.string().optional(), sku: z.string().optional(), status: z.string().optional(), billingCycle: z.string().optional(), }); // ============================================================================ // Order Item Details Schema // ============================================================================ export const orderItemDetailsSchema = z.object({ id: z.string(), orderId: z.string(), quantity: z.number().int().min(1), unitPrice: z.number().optional(), totalPrice: z.number().optional(), billingCycle: z.string().optional(), product: z.object({ id: z.string().optional(), name: z.string().optional(), sku: z.string().optional(), itemClass: z.string().optional(), whmcsProductId: z.string().optional(), internetOfferingType: z.string().optional(), internetPlanTier: z.string().optional(), vpnRegion: z.string().optional(), }).optional(), }); // ============================================================================ // Order Summary Schema // ============================================================================ export const orderSummarySchema = z.object({ id: z.string(), orderNumber: z.string(), status: z.string(), orderType: z.string().optional(), effectiveDate: z.string(), // IsoDateTimeString totalAmount: z.number().optional(), createdDate: z.string(), // IsoDateTimeString lastModifiedDate: z.string(), // IsoDateTimeString whmcsOrderId: z.string().optional(), itemsSummary: z.array(orderItemSummarySchema), }); // ============================================================================ // Order Details Schema // ============================================================================ export const orderDetailsSchema = orderSummarySchema.extend({ accountId: z.string().optional(), accountName: z.string().optional(), pricebook2Id: z.string().optional(), activationType: z.string().optional(), activationStatus: z.string().optional(), activationScheduledAt: z.string().optional(), // IsoDateTimeString activationErrorCode: z.string().optional(), activationErrorMessage: z.string().optional(), activatedDate: z.string().optional(), // IsoDateTimeString items: z.array(orderItemDetailsSchema), });