feat: custom workspace slugs

This commit is contained in:
Henry
2025-01-23 22:22:29 +00:00
parent 0bd23d24ac
commit f78dd07c38
14 changed files with 57 additions and 58 deletions

View File

@@ -3,6 +3,7 @@ import { z } from "zod";
import * as workspaceRepo from "@kan/db/repository/workspace.repo";
import * as workspaceSlugRepo from "@kan/db/repository/workspaceSlug.repo";
import { generateUID } from "@kan/utils";
import { createTRPCRouter, protectedProcedure, publicProcedure } from "../trpc";
@@ -123,9 +124,12 @@ export const workspaceRouter = createTRPCRouter({
code: "UNAUTHORIZED",
});
const result = await workspaceRepo.create(ctx.db, {
const workspacePublicId = generateUID();
const result = await workspaceRepo.create(ctx.adminDb, {
publicId: workspacePublicId,
name: input.name,
slug: input.name,
slug: workspacePublicId,
createdBy: userId,
});
@@ -251,12 +255,11 @@ export const workspaceRouter = createTRPCRouter({
z.object({
isAvailable: z.boolean(),
isReserved: z.boolean(),
isPremium: z.boolean(),
}),
)
.query(async ({ ctx, input }) => {
const slug = input.workspaceSlug.toLowerCase();
// check list of reserved or premium slugs
// check slug is not reserved
const workspaceSlug = await workspaceSlugRepo.getWorkspaceSlug(
ctx.adminDb,
slug,
@@ -270,7 +273,6 @@ export const workspaceRouter = createTRPCRouter({
isAvailable:
isWorkspaceSlugAvailable && workspaceSlug?.type !== "reserved",
isReserved: workspaceSlug?.type === "reserved",
isPremium: workspaceSlug?.type === "premium",
};
}),
});

View File

@@ -6,6 +6,7 @@ import { generateUID } from "@kan/utils";
export const create = async (
db: SupabaseClient<Database>,
workspaceInput: {
publicId?: string;
name: string;
slug: string;
createdBy: string;
@@ -14,9 +15,9 @@ export const create = async (
const { data } = await db
.from("workspace")
.insert({
publicId: generateUID(),
publicId: workspaceInput.publicId ?? generateUID(),
name: workspaceInput.name,
slug: workspaceInput.name.toLowerCase(),
slug: workspaceInput.slug,
createdBy: workspaceInput.createdBy,
})
.select(`id, publicId, name, slug, description, plan`)
@@ -30,6 +31,7 @@ export const create = async (
workspaceId: data.id,
createdBy: workspaceInput.createdBy,
role: "admin",
status: "active",
});
const newWorkspace = { ...data };