Refactor Stripe subscription line item management in WorkspaceUsersUpdated job

- Improve handling of extra user line items in Stripe subscriptions
- Add logic to remove line item when quantity is zero
- Optimize line item creation and update process
- Simplify environment check using app() helper method
This commit is contained in:
Julien Nahum 2025-02-27 15:04:38 +08:00
parent d2f938803b
commit b388c729ce
1 changed files with 21 additions and 10 deletions

View File

@ -38,7 +38,7 @@ class WorkspaceUsersUpdated implements ShouldQueue
public function handle(): void
{
// If self-hosted, no need to update billing
if (!pricing_enabled() || \App::environment('testing')) {
if (!pricing_enabled() || app()->environment('testing')) {
return;
}
@ -80,16 +80,27 @@ class WorkspaceUsersUpdated implements ShouldQueue
$subscriptionInterval = BillingHelper::getLineItemInterval($mainSubscriptionItem);
$extraUserLineItem = $this->getLineItem($lineItems, 'extra_user');
if ($extraUserLineItem) {
$stripe->subscriptionItems->update(
$extraUserLineItem->id,
['quantity' => $quantity]
);
if ($quantity === 0) {
// If quantity is 0, remove the line item if it exists
if ($extraUserLineItem) {
$stripe->subscriptionItems->delete($extraUserLineItem->id);
}
} else {
$stripeSub->items->create([
'price' => $extraUserPricing[$subscriptionInterval],
'quantity' => $quantity,
]);
// If quantity is greater than 0
if ($extraUserLineItem) {
// Update existing line item
$stripe->subscriptionItems->update(
$extraUserLineItem->id,
['quantity' => $quantity]
);
} else {
// Create new line item
$stripeSub->items->create([
'price' => $extraUserPricing[$subscriptionInterval],
'quantity' => $quantity,
]);
}
}
}