From 3bae03613d146cf14f4aa633d1b080fed1be96f6 Mon Sep 17 00:00:00 2001 From: Henry <30578846+hjball@users.noreply.github.com> Date: Sun, 25 Jan 2026 21:20:04 +0000 Subject: [PATCH] feat(cloud): reset workspace slug on subscription cancelled (#335) --- packages/auth/src/plugins.ts | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/packages/auth/src/plugins.ts b/packages/auth/src/plugins.ts index 948d3530..3b3b9e64 100644 --- a/packages/auth/src/plugins.ts +++ b/packages/auth/src/plugins.ts @@ -6,6 +6,7 @@ import type { dbClient } from "@kan/db/client"; import * as memberRepo from "@kan/db/repository/member.repo"; import * as subscriptionRepo from "@kan/db/repository/subscription.repo"; import * as workspaceRepo from "@kan/db/repository/workspace.repo"; +import { generateUID } from "@kan/shared/utils"; import { sendEmail } from "@kan/email"; import { createStripeClient } from "@kan/stripe"; @@ -132,8 +133,23 @@ export function createPlugins(db: dbClient) { if (workspace?.id) { await memberRepo.pauseAllMembers(db, workspace.id); + + // Reset slug to publicId, or generate a UID if publicId is taken + let newSlug = workspace.publicId; + + if (workspace.slug !== workspace.publicId) { + const isPublicIdAvailable = await workspaceRepo.isWorkspaceSlugAvailable( + db, + workspace.publicId, + ); + if (!isPublicIdAvailable) { + newSlug = generateUID(); + } + } + await workspaceRepo.update(db, subscription.referenceId, { plan: "free", + slug: newSlug, }); } },