diff --git a/packages/twenty-server/src/engine/core-modules/billing-webhook/services/billing-webhook-subscription.service.ts b/packages/twenty-server/src/engine/core-modules/billing-webhook/services/billing-webhook-subscription.service.ts index 69c0180686..d520dc962e 100644 --- a/packages/twenty-server/src/engine/core-modules/billing-webhook/services/billing-webhook-subscription.service.ts +++ b/packages/twenty-server/src/engine/core-modules/billing-webhook/services/billing-webhook-subscription.service.ts @@ -150,9 +150,7 @@ export class BillingWebhookSubscriptionService { 'currentBillingSubscription', ]); - const shouldSuspend = this.shouldSuspendWorkspace(data); - - if (shouldSuspend) { + if (this.shouldSuspendWorkspace(data)) { if (workspace.activationStatus === WorkspaceActivationStatus.ACTIVE) { await this.workspaceService.suspendWorkspace(workspaceId); } else if ( @@ -162,6 +160,7 @@ export class BillingWebhookSubscriptionService { await this.workspaceService.deleteWorkspace(workspace.id); } } else if ( + this.shouldReactivateWorkspace(data) && workspace.activationStatus === WorkspaceActivationStatus.SUSPENDED ) { await this.workspaceService.reactivateWorkspace(workspaceId); @@ -216,6 +215,22 @@ export class BillingWebhookSubscriptionService { ); } + shouldReactivateWorkspace( + data: + | Stripe.CustomerSubscriptionUpdatedEvent.Data + | Stripe.CustomerSubscriptionCreatedEvent.Data + | Stripe.CustomerSubscriptionDeletedEvent.Data, + ): boolean { + const status = data.object.status as SubscriptionStatus; + + const activeStatuses = [ + SubscriptionStatus.Active, + SubscriptionStatus.Trialing, + ]; + + return activeStatuses.includes(status); + } + async updateBillingSubscriptionItems( subscriptionId: string, event: