barsa 7500b5fce0 Enhance security and refactor order processing for improved reliability
- Implemented Redis-backed idempotency keys in SIM activation to prevent race conditions and double-charging.
- Increased bcrypt hashing rounds from 12 to 14 for stronger password security.
- Introduced a structured exception hierarchy to replace generic errors with domain-specific exceptions.
- Centralized Internet Access Mode constants and improved schema organization by extracting duplicated enum values.
- Updated various components to utilize new domain types for better consistency and maintainability.
- Enhanced error handling in SIM fulfillment and order activation processes to provide clearer feedback and prevent duplicate processing.
2025-10-27 16:53:19 +09:00

209 lines
5.6 KiB
TypeScript

/**
* Orders Domain - Contract
*
* Business types and provider-specific mapping types.
* Validated types are derived from schemas (see schema.ts).
*/
import type { SalesforceProductFieldMap } from "../catalog/contract";
import type { SalesforceAccountFieldMap } from "../customer/index";
import type { UserIdMapping } from "../mappings/contract";
import type { SalesforceOrderRecord } from "./providers/salesforce/raw.types";
import type { OrderConfigurations } from "./schema";
// ============================================================================
// 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 (subset of UserIdMapping)
*/
export type UserMapping = Pick<UserIdMapping, "userId" | "whmcsClientId" | "sfAccountId">;
// ============================================================================
// Checkout Types
// ============================================================================
/**
* Individual item in checkout cart
*/
export interface CheckoutItem {
id: string;
sku: string;
name: string;
description?: string;
monthlyPrice?: number;
oneTimePrice?: number;
quantity: number;
itemType: 'plan' | 'installation' | 'addon' | 'activation' | 'vpn';
autoAdded?: boolean;
}
/**
* 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
*/
export interface OrderFulfillmentValidationResult {
sfOrder: SalesforceOrderRecord;
clientId: number;
isAlreadyProvisioned: boolean;
whmcsOrderId?: string;
}
// ============================================================================
// 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';