Files
cfw-autumn/server/tests/utils/cusProductUtils/cusEntSearchUtils.ts
2025-09-22 14:45:25 +01:00

101 lines
2.1 KiB
TypeScript

import { BillingType, EntInterval } from "@autumn/shared";
import { getBillingType } from "@/internal/products/prices/priceUtils.js";
import { FullCustomerEntitlement } from "@autumn/shared";
import { getRelatedCusPrice } from "@/internal/customers/cusProducts/cusEnts/cusEntUtils.js";
import { FullCusProduct } from "@autumn/shared";
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;
}
let 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;
}
let 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;
}
let relatedCusPrice = getRelatedCusPrice(
cusEnt,
cusProduct.customer_prices,
);
if (
relatedCusPrice &&
getBillingType(relatedCusPrice?.price.config!) ===
BillingType.UsageInArrear
) {
return true;
}
return false;
},
);
};