import { requireOwner, withCors, preflight } from "@/lib/admin"; import { sql } from "@/lib/db"; export async function OPTIONS() { return preflight(); } type DriverBody = { first_name?: string; last_name?: string; profile_image_url?: string; car_image_url?: string; car_seats?: number; rating?: number; }; export async function PATCH(request: Request, { id }: { id: string }) { const auth = await requireOwner(request); if ("error" in auth) return withCors(auth.error); try { const body = (await request.json()) as DriverBody; const rows = await sql` UPDATE drivers SET first_name = COALESCE(${body.first_name ?? null}, first_name), last_name = COALESCE(${body.last_name ?? null}, last_name), profile_image_url = COALESCE(${body.profile_image_url ?? null}, profile_image_url), car_image_url = COALESCE(${body.car_image_url ?? null}, car_image_url), car_seats = COALESCE(${body.car_seats ?? null}, car_seats), rating = COALESCE(${body.rating ?? null}, rating) WHERE id = ${id} RETURNING * `; if (!rows[0]) { return withCors( Response.json({ error: "Driver not found." }, { status: 404 }), ); } return withCors(Response.json({ data: rows[0] })); } catch (error) { console.error("[ADMIN_DRIVER_PATCH]: ", error); return withCors( Response.json({ error: "Internal Server Error" }, { status: 500 }), ); } } export async function DELETE(request: Request, { id }: { id: string }) { const auth = await requireOwner(request); if ("error" in auth) return withCors(auth.error); try { const used = await sql<{ n: number }>` SELECT COUNT(*)::int AS n FROM rides WHERE driver_id = ${id} `; if (used[0].n > 0) { return withCors( Response.json( { error: "Driver has recorded rides and cannot be deleted." }, { status: 409 }, ), ); } const rows = await sql` DELETE FROM drivers WHERE id = ${id} RETURNING id `; if (!rows[0]) { return withCors( Response.json({ error: "Driver not found." }, { status: 404 }), ); } return withCors(Response.json({ data: rows[0] })); } catch (error) { console.error("[ADMIN_DRIVER_DELETE]: ", error); return withCors( Response.json({ error: "Internal Server Error" }, { status: 500 }), ); } }