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

@@ -17,7 +17,7 @@ const stripe = new Stripe(stripeSecretKey, {
apiVersion: "2024-12-18.acacia",
});
const usernameSchema = z
const workspaceSlugSchema = z
.string()
.min(3)
.max(24)
@@ -26,7 +26,7 @@ const usernameSchema = z
interface CheckoutSessionRequest {
successUrl: string;
cancelUrl: string;
username: string;
slug: string;
workspacePublicId: string;
stripeCustomerId: string;
}
@@ -63,9 +63,9 @@ export default async function handler(req: NextRequest) {
}
const body = (await req.json()) as CheckoutSessionRequest;
const { successUrl, cancelUrl, username, workspacePublicId } = body;
const { successUrl, cancelUrl, slug, workspacePublicId } = body;
if (!successUrl || !cancelUrl || !username || !workspacePublicId) {
if (!successUrl || !cancelUrl || !slug || !workspacePublicId) {
return new Response(
JSON.stringify({ error: "Missing required fields" }),
{
@@ -75,10 +75,10 @@ export default async function handler(req: NextRequest) {
);
}
const usernameResult = usernameSchema.safeParse(username);
const slugResult = workspaceSlugSchema.safeParse(slug);
if (!usernameResult.success) {
return new Response(JSON.stringify({ error: "Invalid username" }), {
if (!slugResult.success) {
return new Response(JSON.stringify({ error: "Invalid workspace slug" }), {
status: 400,
headers: { "Content-Type": "application/json" },
});
@@ -109,7 +109,7 @@ export default async function handler(req: NextRequest) {
cancel_url: `${process.env.WEBSITE_URL}${cancelUrl}`,
customer: user.stripeCustomerId ?? undefined,
metadata: {
username,
workspaceSlug: slug,
workspacePublicId,
},
});

View File

@@ -54,9 +54,9 @@ export default async function handler(req: NextRequest) {
const metaData = checkoutSession.metadata;
if (metaData?.workspacePublicId && metaData.username) {
if (metaData?.workspacePublicId && metaData.workspaceSlug) {
await workspaceRepo.update(db, metaData.workspacePublicId, {
slug: metaData.username,
slug: metaData.workspaceSlug,
plan: "pro",
});
}