44 lines
1.1 KiB
TypeScript
44 lines
1.1 KiB
TypeScript
|
|
/**
|
||
|
|
* Checkout Domain - Contract
|
||
|
|
*
|
||
|
|
* Business constants and helpers for the checkout flow.
|
||
|
|
*/
|
||
|
|
|
||
|
|
// Re-export ORDER_TYPE from orders domain for convenience
|
||
|
|
export { ORDER_TYPE, type OrderTypeValue } from "../orders/contract.js";
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Checkout-specific order types (subset of ORDER_TYPE, excludes "Other")
|
||
|
|
* These are the types that can be ordered through checkout.
|
||
|
|
*/
|
||
|
|
export const CHECKOUT_ORDER_TYPE = {
|
||
|
|
INTERNET: "Internet",
|
||
|
|
SIM: "SIM",
|
||
|
|
VPN: "VPN",
|
||
|
|
} as const;
|
||
|
|
|
||
|
|
export type CheckoutOrderTypeValue = (typeof CHECKOUT_ORDER_TYPE)[keyof typeof CHECKOUT_ORDER_TYPE];
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Convert legacy uppercase order type to PascalCase
|
||
|
|
* Used for migrating old localStorage data
|
||
|
|
*/
|
||
|
|
export function normalizeOrderType(value: unknown): CheckoutOrderTypeValue | null {
|
||
|
|
if (typeof value !== "string") return null;
|
||
|
|
|
||
|
|
const upper = value.trim().toUpperCase();
|
||
|
|
switch (upper) {
|
||
|
|
case "INTERNET":
|
||
|
|
return "Internet";
|
||
|
|
case "SIM":
|
||
|
|
return "SIM";
|
||
|
|
case "VPN":
|
||
|
|
return "VPN";
|
||
|
|
default:
|
||
|
|
return null;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
// Re-export types from schema
|
||
|
|
export type { OrderType, PriceBreakdownItem, CartItem } from "./schema.js";
|