Files
speckle-server/packages/server/modules/gatekeeper/services/subscriptions/mutateSubscriptionDataWithNewValidSeatNumbers.ts
T
2025-03-11 17:52:42 +01:00

35 lines
1.2 KiB
TypeScript

import {
GetWorkspacePlanProductId,
SubscriptionDataInput
} from '@/modules/gatekeeper/domain/billing'
import { WorkspacePricingProducts } from '@/modules/gatekeeperCore/domain/billing'
import { LogicError } from '@/modules/shared/errors'
export const mutateSubscriptionDataWithNewValidSeatNumbers = ({
seatCount,
workspacePlan,
getWorkspacePlanProductId,
subscriptionData
}: {
seatCount: number
workspacePlan: WorkspacePricingProducts
getWorkspacePlanProductId: GetWorkspacePlanProductId
subscriptionData: SubscriptionDataInput
}): void => {
const productId = getWorkspacePlanProductId({ workspacePlan })
const product = subscriptionData.products.find(
(product) => product.productId === productId
)
if (seatCount < 0) throw new LogicError('Invalid seat count, cannot be negative')
if (seatCount === 0 && product === undefined) return
if (seatCount === 0 && product !== undefined) {
const prodIndex = subscriptionData.products.indexOf(product)
subscriptionData.products.splice(prodIndex, 1)
} else if (product !== undefined && product.quantity >= seatCount) {
product.quantity = seatCount
} else {
throw new LogicError('Invalid subscription state')
}
}