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