feat(cloud): write worspace slug availability checks to db

This commit is contained in:
Henry
2025-09-10 21:30:52 +01:00
parent 564ba508e7
commit 6b05d5b60f
2 changed files with 43 additions and 0 deletions

View File

@@ -334,6 +334,14 @@ export const workspaceRouter = createTRPCRouter({
}), }),
) )
.query(async ({ ctx, input }) => { .query(async ({ ctx, input }) => {
const userId = ctx.user?.id;
if (!userId)
throw new TRPCError({
message: `User not authenticated`,
code: "UNAUTHORIZED",
});
const slug = input.workspaceSlug.toLowerCase(); const slug = input.workspaceSlug.toLowerCase();
// check slug is not reserved // check slug is not reserved
const workspaceSlug = await workspaceSlugRepo.getWorkspaceSlug( const workspaceSlug = await workspaceSlugRepo.getWorkspaceSlug(
@@ -345,6 +353,19 @@ export const workspaceRouter = createTRPCRouter({
const isWorkspaceSlugAvailable = const isWorkspaceSlugAvailable =
await workspaceRepo.isWorkspaceSlugAvailable(ctx.db, slug); await workspaceRepo.isWorkspaceSlugAvailable(ctx.db, slug);
const isAvailable =
isWorkspaceSlugAvailable && workspaceSlug?.type !== "reserved";
const isReserved = workspaceSlug?.type === "reserved";
if (env("NEXT_PUBLIC_KAN_ENV") === "cloud") {
await workspaceSlugRepo.createWorkspaceSlugCheck(ctx.db, {
slug,
userId,
available: isAvailable,
reserved: isReserved,
});
}
return { return {
isAvailable: isAvailable:
isWorkspaceSlugAvailable && workspaceSlug?.type !== "reserved", isWorkspaceSlugAvailable && workspaceSlug?.type !== "reserved",

View File

@@ -0,0 +1,22 @@
CREATE TABLE IF NOT EXISTS "workspace_slug_checks" (
"id" bigserial PRIMARY KEY NOT NULL,
"slug" varchar(255) NOT NULL,
"available" boolean NOT NULL,
"reserved" boolean NOT NULL,
"workspaceId" bigint,
"createdBy" uuid,
"createdAt" timestamp DEFAULT now() NOT NULL
);
--> statement-breakpoint
ALTER TABLE "workspace_slug_checks" ENABLE ROW LEVEL SECURITY;--> statement-breakpoint
DO $$ BEGIN
ALTER TABLE "workspace_slug_checks" ADD CONSTRAINT "workspace_slug_checks_workspaceId_workspace_id_fk" FOREIGN KEY ("workspaceId") REFERENCES "public"."workspace"("id") ON DELETE no action ON UPDATE no action;
EXCEPTION
WHEN duplicate_object THEN null;
END $$;
--> statement-breakpoint
DO $$ BEGIN
ALTER TABLE "workspace_slug_checks" ADD CONSTRAINT "workspace_slug_checks_createdBy_user_id_fk" FOREIGN KEY ("createdBy") REFERENCES "public"."user"("id") ON DELETE set null ON UPDATE no action;
EXCEPTION
WHEN duplicate_object THEN null;
END $$;