barsa f68fb50638 Update TypeScript configurations and improve module imports
- Changed TypeScript target and library settings in tsconfig files to align with ESNext standards.
- Updated pnpm version in GitHub workflows for better dependency management.
- Modified Dockerfile to reflect the updated pnpm version.
- Adjusted import statements across various domain modules to include file extensions for consistency and compatibility.
- Cleaned up TypeScript configuration files for improved clarity and organization.
2025-12-10 15:22:10 +09:00

79 lines
2.4 KiB
TypeScript

import {
orderConfigurationsSchema,
orderSelectionsSchema,
type OrderConfigurations,
type CreateOrderRequest,
type OrderSelections,
} from "./schema.js";
import { ORDER_TYPE, type CheckoutCart, type OrderTypeValue } from "./contract.js";
export function buildOrderConfigurations(selections: OrderSelections): OrderConfigurations {
const normalizedSelections = orderSelectionsSchema.parse(selections);
return orderConfigurationsSchema.parse({
...normalizedSelections,
address: normalizedSelections.address
? {
street: normalizedSelections.address.street ?? null,
streetLine2: normalizedSelections.address.streetLine2 ?? null,
city: normalizedSelections.address.city ?? null,
state: normalizedSelections.address.state ?? null,
postalCode: normalizedSelections.address.postalCode ?? null,
country: normalizedSelections.address.country ?? null,
}
: undefined,
});
}
export function createOrderRequest(payload: {
orderType?: string;
skus: string[];
configurations?: OrderSelections | null;
}): CreateOrderRequest {
const orderType = (payload.orderType ?? ORDER_TYPE.OTHER) as CreateOrderRequest["orderType"];
const configurations = payload.configurations
? buildOrderConfigurations(payload.configurations)
: undefined;
return {
orderType,
skus: payload.skus,
...(configurations ? { configurations } : {}),
};
}
/**
* Transform CheckoutCart into CreateOrderRequest
* Handles SKU extraction, validation, and payload formatting
*
* @throws Error if no products are selected
*/
export function prepareOrderFromCart(
cart: CheckoutCart,
orderType: OrderTypeValue
): CreateOrderRequest {
const uniqueSkus = Array.from(
new Set(
cart.items
.map(item => item.sku)
.filter((sku): sku is string => typeof sku === "string" && sku.trim().length > 0)
)
);
if (uniqueSkus.length === 0) {
throw new Error("No products selected for order. Please go back and select products.");
}
// Note: Zod validation of the final structure should happen at the boundary or via schema.parse
// This function focuses on the structural transformation logic.
const orderData: CreateOrderRequest = {
orderType,
skus: uniqueSkus,
...(Object.keys(cart.configuration).length > 0
? { configurations: cart.configuration }
: {}),
};
return orderData;
}