Files
cfw-autumn/shared/utils/cusUtils/fullCusUtils/fullCustomerToOverageAllowed.ts
2026-04-24 21:12:04 +01:00

45 lines
1.4 KiB
TypeScript

import type { DbOverageAllowed } from "@models/cusModels/billingControls/customerBillingControls.js";
import type { FullCustomer } from "@models/cusModels/fullCusModel.js";
/**
* Extract overage_allowed entries for the requested features from a FullCustomer.
*
* Entity inherits from the customer per feature_id: entity's entry wins when
* present, customer's entry fills any gaps.
*/
export const fullCustomerToOverageAllowedByFeatureId = ({
fullCustomer,
featureIds,
internalEntityId,
}: {
fullCustomer: FullCustomer;
featureIds: string[];
internalEntityId?: string;
}): Record<string, DbOverageAllowed> => {
const entity = internalEntityId
? fullCustomer.entities?.find(
(candidate) => candidate.internal_id === internalEntityId,
)
: fullCustomer.entity;
const entityOverageAllowed = entity?.overage_allowed ?? [];
const customerOverageAllowed = fullCustomer.overage_allowed ?? [];
const overageAllowedByFeatureId: Record<string, DbOverageAllowed> = {};
const uniqueFeatureIds = [...new Set(featureIds)];
for (const featureId of uniqueFeatureIds) {
const overageAllowed =
entityOverageAllowed.find(
(candidate) => candidate.feature_id === featureId,
) ??
customerOverageAllowed.find(
(candidate) => candidate.feature_id === featureId,
);
if (overageAllowed) {
overageAllowedByFeatureId[featureId] = overageAllowed;
}
}
return overageAllowedByFeatureId;
};