/** * Orders Domain - Contract * * Business types and provider-specific mapping types. * Validated types are derived from schemas (see schema.ts). */ import type { OrderConfigurations } from "./schema.js"; // ============================================================================ // Order Type Constants // ============================================================================ /** * Order types available in the system */ export const ORDER_TYPE = { INTERNET: "Internet", SIM: "SIM", VPN: "VPN", OTHER: "Other", } as const; export type OrderTypeValue = (typeof ORDER_TYPE)[keyof typeof ORDER_TYPE]; // ============================================================================ // Order Status Constants // ============================================================================ /** * Possible order statuses */ export const ORDER_STATUS = { DRAFT: "Draft", ACTIVATED: "Activated", PENDING: "Pending", FAILED: "Failed", CANCELLED: "Cancelled", } as const; export type OrderStatusValue = (typeof ORDER_STATUS)[keyof typeof ORDER_STATUS]; // ============================================================================ // Activation Type Constants // ============================================================================ /** * Order activation types */ export const ACTIVATION_TYPE = { IMMEDIATE: "Immediate", SCHEDULED: "Scheduled", } as const; export type ActivationTypeValue = (typeof ACTIVATION_TYPE)[keyof typeof ACTIVATION_TYPE]; // ============================================================================ // SIM Type Constants // ============================================================================ /** * SIM card types */ export const SIM_TYPE = { ESIM: "eSIM", PHYSICAL: "Physical SIM", } as const; export type SimTypeValue = (typeof SIM_TYPE)[keyof typeof SIM_TYPE]; // ============================================================================ // Internet Access Mode Constants // ============================================================================ /** * Internet access mode types for connection configuration */ export const ACCESS_MODE = { IPOE_BYOR: "IPoE-BYOR", IPOE_HGW: "IPoE-HGW", PPPOE: "PPPoE", } as const; export type AccessModeValue = (typeof ACCESS_MODE)[keyof typeof ACCESS_MODE]; // ============================================================================ // Order Fulfillment Error Codes // ============================================================================ /** * Error codes for order fulfillment operations * These represent business-level error categories */ export const ORDER_FULFILLMENT_ERROR_CODE = { PAYMENT_METHOD_MISSING: "PAYMENT_METHOD_MISSING", ORDER_NOT_FOUND: "ORDER_NOT_FOUND", WHMCS_ERROR: "WHMCS_ERROR", MAPPING_ERROR: "MAPPING_ERROR", VALIDATION_ERROR: "VALIDATION_ERROR", SALESFORCE_ERROR: "SALESFORCE_ERROR", PROVISIONING_ERROR: "PROVISIONING_ERROR", } as const; export type OrderFulfillmentErrorCode = (typeof ORDER_FULFILLMENT_ERROR_CODE)[keyof typeof ORDER_FULFILLMENT_ERROR_CODE]; // ============================================================================ // Business Types (used internally, not validated at API boundary) // ============================================================================ /** * Order creation type used for order creation flows */ export type OrderCreationType = "Internet" | "SIM" | "VPN" | "Other"; /** * Order status (string literal for flexibility) */ export type OrderStatus = string; /** * Order type (string literal for flexibility) */ export type OrderType = string; /** * User mapping for order creation */ export interface UserMapping { userId: string; whmcsClientId: number; sfAccountId?: string | null | undefined; } // ============================================================================ // Checkout Types // ============================================================================ /** * Individual item in checkout cart */ export interface CheckoutItem { id: string; sku: string; name: string; description?: string | undefined; monthlyPrice?: number | undefined; oneTimePrice?: number | undefined; quantity: number; itemType: "plan" | "installation" | "addon" | "activation" | "vpn"; autoAdded?: boolean | undefined; } /** * Checkout totals calculation */ export interface CheckoutTotals { monthlyTotal: number; oneTimeTotal: number; } /** * Complete checkout cart with items, totals, and configuration */ export interface CheckoutCart { items: CheckoutItem[]; totals: CheckoutTotals; configuration: OrderConfigurations; } /** * Order creation response from BFF */ export interface OrderCreateResponse { sfOrderId: string; status: string; message: string; } /** * Order fulfillment validation result */ // NOTE: Provider-specific fulfillment types are intentionally not part of the public orders contract. // BFF integration code should import them from: // @customer-portal/domain/orders/providers // ============================================================================ // Re-export Types from Schema (Schema-First Approach) // ============================================================================ export type { // Order item types OrderItemSummary, OrderItemDetails, // Order types OrderSummary, OrderDetails, // Query and creation types OrderQueryParams, OrderConfigurationsAddress, OrderConfigurations, CreateOrderRequest, OrderBusinessValidation, SfOrderIdParam, } from "./schema.js";