import { requireDriverProfile } from "@/lib/driver"; import { sql } from "@/lib/db"; // GET — the driver's world in one poll: // offers : incoming ride_offers awaiting this driver's accept/decline, // each joined to its ride so the card can show pickup/dest/fare. // active : the ride this driver is currently on (accepted or en_route). // recent : rides completed today, for the earnings summary. export async function GET(req: Request) { const result = await requireDriverProfile(req); if ("error" in result) return result.error; try { const { driverId } = result; const offers = await sql` SELECT ro.id AS offer_id, ro.offered_at, r.ride_id, r.origin_address, r.destination_address, r.origin_latitude, r.origin_longitude, r.destination_latitude, r.destination_longitude, r.ride_time, r.fare_price, r.payment_status, r.service, r.user_id FROM ride_offers ro JOIN rides r ON r.ride_id = ro.ride_id WHERE ro.driver_id = ${driverId} AND ro.status = 'offered' ORDER BY ro.offered_at DESC `; const active = await sql` SELECT r.ride_id, r.status, r.service, r.payment_status, r.origin_address, r.destination_address, r.origin_latitude, r.origin_longitude, r.destination_latitude, r.destination_longitude, r.ride_time, r.fare_price, r.created_at, u.name AS rider_name, u.phone AS rider_phone FROM rides r LEFT JOIN users u ON u.id = r.user_id WHERE r.driver_id = ${driverId} AND r.status IN ('accepted', 'en_route') ORDER BY r.created_at DESC LIMIT 1 `; const recent = await sql` SELECT ride_id, fare_price, service, completed_at FROM rides WHERE driver_id = ${driverId} AND status = 'completed' AND completed_at >= CURRENT_DATE ORDER BY completed_at DESC `; const earnings = recent.reduce( (sum, r) => sum + Number(r.fare_price), 0, ); return Response.json({ data: { offers: offers as unknown as OfferRow[], active: (active[0] as unknown as ActiveRide | undefined) ?? null, recent: recent as unknown as RecentRow[], earnings, }, }); } catch (error) { console.error("[DRIVER_RIDES]: ", error); return Response.json({ error: "Internal Server Error" }, { status: 500 }); } } type OfferRow = { offer_id: number; offered_at: string; ride_id: number; origin_address: string; destination_address: string; origin_latitude: number; origin_longitude: number; destination_latitude: number; destination_longitude: number; ride_time: number; fare_price: number; payment_status: string; service: string; user_id: string; }; type ActiveRide = { ride_id: number; status: string; service: string; payment_status: string; origin_address: string; destination_address: string; origin_latitude: number; origin_longitude: number; destination_latitude: number; destination_longitude: number; ride_time: number; fare_price: number; created_at: string; rider_name: string | null; rider_phone: string | null; }; type RecentRow = { ride_id: number; fare_price: number; service: string; completed_at: string; };