45 lines
1.6 KiB
TypeScript
45 lines
1.6 KiB
TypeScript
import type { FullCusEntWithFullCusProduct } from "@models/cusProductModels/cusEntModels/cusEntWithProduct";
|
|
import type { FullCustomerPrice } from "@models/cusProductModels/cusPriceModels/cusPriceModels";
|
|
import type {
|
|
FeatureOptions,
|
|
FullCusProduct,
|
|
} from "@models/cusProductModels/cusProductModels";
|
|
import type { EntitlementWithFeature } from "@models/productModels/entModels/entModels";
|
|
import type { Price } from "@models/productModels/priceModels/priceModels";
|
|
import type { FullProduct } from "@models/productModels/productModels";
|
|
import { cusProductToProduct } from "@utils/cusProductUtils/convertCusProduct";
|
|
import { cusEntToCusPrice } from "./cusEntToCusPrice";
|
|
import { customerEntitlementToOptions } from "./customerEntitlementToOptions";
|
|
|
|
export type CusEntBillingObjects = {
|
|
cusProduct: FullCusProduct;
|
|
cusPrice: FullCustomerPrice;
|
|
price: Price;
|
|
product: FullProduct;
|
|
entitlement: EntitlementWithFeature;
|
|
options: FeatureOptions | undefined;
|
|
};
|
|
|
|
/**
|
|
* Extracts the core billing objects from a FullCusEntWithFullCusProduct.
|
|
* Returns null if cusProduct or cusPrice can't be resolved.
|
|
*/
|
|
export const cusEntToBillingObjects = ({
|
|
cusEnt,
|
|
}: {
|
|
cusEnt: FullCusEntWithFullCusProduct;
|
|
}): CusEntBillingObjects | null => {
|
|
const cusProduct = cusEnt.customer_product;
|
|
if (!cusProduct) return null;
|
|
|
|
const cusPrice = cusEntToCusPrice({ cusEnt });
|
|
if (!cusPrice) return null;
|
|
|
|
const price = cusPrice.price;
|
|
const product = cusProductToProduct({ cusProduct });
|
|
const entitlement = cusEnt.entitlement;
|
|
const options = customerEntitlementToOptions({ customerEntitlement: cusEnt });
|
|
|
|
return { cusProduct, cusPrice, price, product, entitlement, options };
|
|
};
|