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
This commit is contained in:
@@ -1,5 +1,26 @@
|
||||
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();
|
||||
@@ -36,3 +57,31 @@ export async function POST(req: Request) {
|
||||
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 });
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user