Files
waseel/app/(api)/user+api.ts
T
Krikorios fbe92c9d16 Add rider/driver role selection after sign-up
- users.role column (+ migration in seed script)
- /(api)/user: GET role by clerkId, PATCH to set role
- Role selection screen; drivers get placeholder driver-home
- Root index routes by role; hardened location handling on home
2026-08-22 16:13:59 +03:00

88 lines
2.0 KiB
TypeScript

import { neon } from "@neondatabase/serverless";
export async function GET(req: Request) {
const sql = neon(process.env.DATABASE_URL!);
const clerkId = new URL(req.url).searchParams.get("clerkId");
if (!clerkId) {
return Response.json({ error: "Missing clerkId" }, { status: 400 });
}
try {
const response = await sql`
SELECT id, name, email, role FROM users WHERE clerk_id = ${clerkId}
`;
return Response.json({ data: response[0] ?? null });
} catch (error) {
console.log("[GET_USER]: ", error);
return Response.json({ error }, { status: 500 });
}
}
export async function POST(req: Request) {
const sql = neon(process.env.DATABASE_URL!);
const { name, email, clerkId } = await req.json();
if (!name || !email || !clerkId) {
return Response.json(
{
error: "Missing required fields!",
},
{
status: 404,
},
);
}
try {
const response = await sql`
INSERT INTO users (
name,
email,
clerk_id
)
VALUES (
${name},
${email},
${clerkId}
)
`;
return new Response(JSON.stringify({ data: response }));
} catch (error) {
console.log(error);
return Response.json({ error }, { status: 500 });
}
}
export async function PATCH(req: Request) {
const sql = neon(process.env.DATABASE_URL!);
const { clerkId, role } = await req.json();
if (!clerkId || !["rider", "driver"].includes(role)) {
return Response.json(
{ error: "Missing clerkId or invalid role." },
{ status: 400 },
);
}
try {
const response = await sql`
UPDATE users SET role = ${role} WHERE clerk_id = ${clerkId} RETURNING id, role
`;
if (response.length === 0) {
return Response.json({ error: "User not found." }, { status: 404 });
}
return Response.json({ data: response[0] });
} catch (error) {
console.log("[PATCH_USER]: ", error);
return Response.json({ error }, { status: 500 });
}
}