Driver Delivery Flow Fixes
Date: March 2, 2026
During end-to-end testing of the driver delivery flow on staging (ricoya.ipnoelp.com), every step after claiming an order failed. Five separate bugs were identified and fixed.
1. Claim Order — firestore_id Undefined
Symptom: /api/driver/orders/undefined/claim (400 error)
Root Cause: The driver order list endpoints returned raw Supabase rows without a firestore_id field. The client-side code (driverOrdersApi.ts) builds URLs using order.firestore_id, which was undefined.
Fix: Added firestore_id: String(row.id) mapping in both:
src/app/api/driver/orders/route.ts(assigned orders)src/app/api/driver/orders/available/route.ts(available orders)
2. Restaurant Load — 500 Error
Symptom: After claiming an order, the restaurant details failed to load with a 500 error.
Root Cause: src/app/api/driver/restaurants/route.ts referenced legacy_numeric_id column, which does not exist on the restaurants table.
Fix: Changed the filter to use id instead of legacy_numeric_id.
3. Restaurant Single Lookup — 404
Symptom: Restaurant detail page returned 404 for some restaurants.
Root Cause: src/app/api/driver/restaurants/[restaurantId]/route.ts only tried numeric id lookup. Some restaurant references use the legacy_firestore_id string.
Fix: Added fallback — try numeric id first, then legacy_firestore_id if not found.
4. Pickup — 400 Error
Symptom: /api/driver/orders/[orderId]/pickup returned 400.
Root Cause: The pickup endpoint tried to write pickup_verified_by_user_id to the orders table. This column does not exist (only pickup_verified_by_uid and pickup_verified_by_email exist).
Fix: Removed the pickup_verified_by_user_id assignment from the update payload in src/app/api/driver/orders/[orderId]/pickup/route.ts.
5. Proof of Delivery Upload — 500 Error
Symptom: File upload during proof of delivery capture failed.
Root Cause: Two issues:
- The
file_uploadsinsert included astorage_typecolumn that does not exist in the database. - Client-side Supabase insert failed on Safari due to connection issues.
Fix:
- Removed
storage_typefromFileUploadinterface insrc/data/models.ts - Moved the
file_uploadsdatabase insert from client-side (fileUploadsRepo.ts) to the server-side/api/uploadsendpoint usingsupabaseAdmin - Added
recordUploadform field flag to trigger the server-side insert
Files Changed
| File | Change |
|---|---|
src/app/api/driver/orders/route.ts |
Added firestore_id mapping |
src/app/api/driver/orders/available/route.ts |
Added firestore_id mapping |
src/app/api/driver/restaurants/route.ts |
Fixed legacy_numeric_id → id |
src/app/api/driver/restaurants/[restaurantId]/route.ts |
Added legacy_firestore_id fallback |
src/app/api/driver/orders/[orderId]/pickup/route.ts |
Removed pickup_verified_by_user_id |
src/app/api/uploads/route.ts |
Added server-side file_uploads insert |
src/repositories/fileUploadsRepo.ts |
Rewrote to use server endpoint |
src/data/models.ts |
Removed storage_type from FileUpload |
Audit
All driver endpoints were audited after fixes. The claim, pickup, resign, and proof routes all use .eq("id", orderId) with string coercion — confirmed safe for Supabase’s integer-to-string comparison.