feat(cloud): write worspace slug availability checks to db
This commit is contained in:
@@ -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",
|
||||||
|
|||||||
@@ -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 $$;
|
||||||
Reference in New Issue
Block a user