feat: premium workspace usernames
This commit is contained in:
@@ -24,6 +24,7 @@ export const authRouter = createTRPCRouter({
|
||||
id: z.string(),
|
||||
email: z.string(),
|
||||
name: z.string().nullable(),
|
||||
stripeCustomerId: z.string().nullable(),
|
||||
}),
|
||||
)
|
||||
.query(async ({ ctx }) => {
|
||||
|
||||
@@ -2,8 +2,9 @@ import { TRPCError } from "@trpc/server";
|
||||
import { z } from "zod";
|
||||
|
||||
import * as workspaceRepo from "@kan/db/repository/workspace.repo";
|
||||
import * as workspaceSlugRepo from "@kan/db/repository/workspaceSlug.repo";
|
||||
|
||||
import { createTRPCRouter, protectedProcedure } from "../trpc";
|
||||
import { createTRPCRouter, protectedProcedure, publicProcedure } from "../trpc";
|
||||
|
||||
export const workspaceRouter = createTRPCRouter({
|
||||
all: protectedProcedure
|
||||
@@ -161,4 +162,42 @@ export const workspaceRouter = createTRPCRouter({
|
||||
|
||||
return result;
|
||||
}),
|
||||
checkSlugAvailability: publicProcedure
|
||||
.meta({
|
||||
openapi: {
|
||||
summary: "Check if a workspace slug is available",
|
||||
method: "GET",
|
||||
path: "/workspaces/check-slug-availability",
|
||||
description: "Checks if a workspace slug is available",
|
||||
tags: ["Workspaces"],
|
||||
protect: true,
|
||||
},
|
||||
})
|
||||
.input(z.object({ workspaceSlug: z.string().min(3).max(24) }))
|
||||
.output(
|
||||
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
|
||||
const workspaceSlug = await workspaceSlugRepo.getWorkspaceSlug(
|
||||
ctx.db,
|
||||
slug,
|
||||
);
|
||||
|
||||
// check slug is not taken already
|
||||
const isWorkspaceSlugAvailable =
|
||||
await workspaceRepo.isWorkspaceSlugAvailable(ctx.db, slug);
|
||||
|
||||
return {
|
||||
isAvailable:
|
||||
isWorkspaceSlugAvailable && workspaceSlug?.type !== "reserved",
|
||||
isReserved: workspaceSlug?.type === "reserved",
|
||||
isPremium: workspaceSlug?.type === "premium",
|
||||
};
|
||||
}),
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user