- 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
88 lines
2.0 KiB
TypeScript
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 });
|
|
}
|
|
}
|