Files
cfw-autumn/server/tests/utils/cusProductUtils/cusEntSearchUtils.ts
John Yeo cb05d169a2 wip
2026-01-23 17:13:19 +00:00

102 lines
2.0 KiB
TypeScript

import {
BillingType,
EntInterval,
type FullCusProduct,
type FullCustomerEntitlement,
} from "@autumn/shared";
import { getRelatedCusPrice } from "@/internal/customers/cusProducts/cusEnts/cusEntUtils.js";
import { getBillingType } from "@/internal/products/prices/priceUtils.js";
import { notNullish } from "@/utils/genUtils.js";
export const getLifetimeFreeCusEnt = ({
cusProduct,
featureId,
}: {
cusProduct: FullCusProduct;
featureId: string;
}) => {
// Get lifetime free cus ent
return cusProduct.customer_entitlements.find(
(cusEnt: FullCustomerEntitlement) => {
if (cusEnt.entitlement.feature.id !== featureId) {
return false;
}
const relatedCusPrice = getRelatedCusPrice(
cusEnt,
cusProduct.customer_prices,
);
if (notNullish(relatedCusPrice)) {
return false;
}
return cusEnt.entitlement.interval === EntInterval.Lifetime;
},
);
};
export const getPrepaidCusEnt = ({
cusProduct,
featureId,
}: {
cusProduct: FullCusProduct;
featureId: string;
}) => {
// Get prepaid cus ent
return cusProduct.customer_entitlements.find(
(cusEnt: FullCustomerEntitlement) => {
if (cusEnt.entitlement.feature.id !== featureId) {
return false;
}
const relatedCusPrice = getRelatedCusPrice(
cusEnt,
cusProduct.customer_prices,
);
if (
relatedCusPrice &&
getBillingType(relatedCusPrice?.price.config!) ===
BillingType.UsageInAdvance
) {
return true;
}
return false;
},
);
};
export const getUsageCusEnt = ({
cusProduct,
featureId,
}: {
cusProduct: FullCusProduct;
featureId: string;
}) => {
// Get usage cus ent
return cusProduct.customer_entitlements.find(
(cusEnt: FullCustomerEntitlement) => {
if (cusEnt.entitlement.feature.id !== featureId) {
return false;
}
const relatedCusPrice = getRelatedCusPrice(
cusEnt,
cusProduct.customer_prices,
);
if (
relatedCusPrice &&
getBillingType(relatedCusPrice?.price.config!) ===
BillingType.UsageInArrear
) {
return true;
}
return false;
},
);
};