Files
cfw-autumn/shared/api/customers/cusFeatures/utils/convert/apiBalanceToAllowed.ts
2026-02-18 19:17:31 +00:00

56 lines
1.3 KiB
TypeScript

import type { ApiBalanceV1 } from "@api/customers/cusFeatures/apiBalanceV1";
import { apiBalanceV1ToAvailableOverage } from "@api/customers/cusFeatures/utils/convert/apiBalanceV1ToAvailableOverage";
import type { Feature } from "@models/featureModels/featureModels";
import { isBooleanFeature, notNullish } from "@utils/index";
import { Decimal } from "decimal.js";
export const apiBalanceToAllowed = ({
apiBalance,
feature,
requiredBalance,
}: {
apiBalance: ApiBalanceV1;
feature: Feature;
requiredBalance: number;
}) => {
if (!apiBalance) {
return false;
}
// 1. Boolean
if (isBooleanFeature({ feature })) {
return true;
}
// 2. Unlimited
if (apiBalance.unlimited) {
return true;
}
// 2. Required balance is negative
if (requiredBalance < 0) {
return true;
}
// 3. Overage allowed
if (apiBalance.overage_allowed) {
// 1. Available overage
const availableOverage = apiBalanceV1ToAvailableOverage({ apiBalance });
if (notNullish(availableOverage)) {
return new Decimal(availableOverage)
.add(apiBalance.remaining)
.gte(requiredBalance);
}
return true;
}
// 4. Balance >= required balance (V1 uses 'remaining' instead of 'current_balance')
if (new Decimal(apiBalance.remaining).gte(requiredBalance)) {
return true;
}
return false;
};