56 lines
1.3 KiB
TypeScript
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;
|
|
};
|