From 8a02613d840b6fe3c66bf610cbe482aab9092c29 Mon Sep 17 00:00:00 2001 From: Henry Date: Fri, 16 Jan 2026 14:43:35 +0000 Subject: [PATCH] feat(cloud): handle cancelled subscriptions --- packages/auth/src/auth.ts | 35 ++++++++++++++++++++--- packages/db/src/repository/member.repo.ts | 12 ++++++++ 2 files changed, 43 insertions(+), 4 deletions(-) diff --git a/packages/auth/src/auth.ts b/packages/auth/src/auth.ts index 952b89a3..38114284 100644 --- a/packages/auth/src/auth.ts +++ b/packages/auth/src/auth.ts @@ -287,13 +287,40 @@ export const initAuth = (db: dbClient) => { if (workspace?.id) { await memberRepo.unpauseAllMembers(db, workspace.id); - - console.log( - `Unpausing all members for workspace ${workspace.id}`, - ); } } }, + onSubscriptionCancel: async ({ + subscription, + cancellationDetails, + }) => { + await triggerWorkflow( + db, + "subscription-canceled", + subscription, + cancellationDetails, + ); + + // for cancelled subscriptions, we need to pause all members and set their workspace plan to free + const workspace = await workspaceRepo.getByPublicId( + db, + subscription.referenceId, + ); + + if (workspace?.id) { + await memberRepo.pauseAllMembers(db, workspace.id); + await workspaceRepo.update(db, subscription.referenceId, { + plan: "free", + }); + } + }, + onSubscriptionUpdate: async ({ subscription }) => { + await triggerWorkflow( + db, + "subscription-updated", + subscription, + ); + }, }, }), ] diff --git a/packages/db/src/repository/member.repo.ts b/packages/db/src/repository/member.repo.ts index 69899725..da081718 100644 --- a/packages/db/src/repository/member.repo.ts +++ b/packages/db/src/repository/member.repo.ts @@ -121,3 +121,15 @@ export const unpauseAllMembers = async (db: dbClient, workspaceId: number) => { ), ); }; + +export const pauseAllMembers = async (db: dbClient, workspaceId: number) => { + await db + .update(workspaceMembers) + .set({ status: "paused" }) + .where( + and( + eq(workspaceMembers.workspaceId, workspaceId), + eq(workspaceMembers.status, "active"), + ), + ); +};