feat: custom workspace slugs
This commit is contained in:
@@ -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",
|
||||
};
|
||||
}),
|
||||
});
|
||||
|
||||
@@ -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 };
|
||||
|
||||
Reference in New Issue
Block a user