group(function () { /* |-------------------------------------------------------------------------- | Public Routes (No Auth Required) |-------------------------------------------------------------------------- */ // Public tracking Route::get('track/{trackingCode}', [DeliveryController::class, 'publicTracking']); /* |-------------------------------------------------------------------------- | Authenticated Routes |-------------------------------------------------------------------------- */ // Protected Routes (Requires Authentication) Route::middleware(['auth:api'])->group(function () { Route::apiResource('delivery-zones', DeliveryZoneController::class); Route::apiResource('zone-pricing-rules', ZonePricingRuleController::class); /* |-------------------------------------------------------------------------- | Delivery Routes |-------------------------------------------------------------------------- */ Route::prefix('deliveries')->group(function () { // List and create Route::get('/', [DeliveryController::class, 'index']); Route::post('/', [DeliveryController::class, 'store']); // Single delivery operations Route::prefix('{delivery}')->group(function () { Route::get('/', [DeliveryController::class, 'show']); Route::get('/tracking', [DeliveryController::class, 'tracking']); Route::get('/status-history', [DeliveryController::class, 'statusHistory']); // Status updates Route::patch('/status', [DeliveryController::class, 'updateStatus']); Route::post('/assign-rider', [DeliveryController::class, 'assignRider']); Route::post('/cancel', [DeliveryController::class, 'cancel']); Route::post('/delivered', [DeliveryController::class, 'markDelivered']); // Rating Route::get('/can-rate', [RatingController::class, 'canRate']); Route::post('/rate', [RatingController::class, 'store']); Route::post('/rate-restaurant', [RatingController::class, 'storeRestaurantRating']); // Tip Route::get('/tip-options', [TipController::class, 'options']); Route::post('/tip/pre-delivery', [TipController::class, 'createPreDeliveryTip']); Route::post('/tip/post-delivery', [TipController::class, 'createPostDeliveryTip']); }); }); /* |-------------------------------------------------------------------------- | Rider Routes |-------------------------------------------------------------------------- */ Route::prefix('riders')->group(function () { // List and nearby Route::get('/', [RiderController::class, 'index']); Route::get('/nearby', [RiderController::class, 'nearby']); Route::post('/', [RiderController::class, 'store']); // Single rider operations Route::prefix('{rider}')->group(function () { Route::get('/', [RiderController::class, 'show']); Route::put('/', [RiderController::class, 'update']); // Location and status // TODO Route::post('/location', [RiderController::class, 'updateLocation']); Route::post('/toggle-online', [RiderController::class, 'toggleOnline']); Route::post('/fcm-token', [RiderController::class, 'updateFcmToken']); // Deliveries Route::get('/active-deliveries', [RiderController::class, 'activeDeliveries']); Route::get('/delivery-history', [RiderController::class, 'deliveryHistory']); // Earnings Route::get('/earnings', [RiderController::class, 'earnings']); Route::get('/earnings/history', [RiderController::class, 'earningsHistory']); Route::get('/payouts', [RiderController::class, 'payouts']); // Ratings Route::get('/ratings', [RiderController::class, 'ratings']); // Admin actions Route::post('/verify', [RiderController::class, 'verify']); Route::post('/suspend', [RiderController::class, 'suspend']); Route::post('/reactivate', [RiderController::class, 'reactivate']); }); }); /* |-------------------------------------------------------------------------- | Rating Routes |-------------------------------------------------------------------------- */ Route::prefix('ratings')->group(function () { Route::get('/', [RatingController::class, 'index']); Route::prefix('{rating}')->group(function () { Route::post('/response', [RatingController::class, 'addRiderResponse']); Route::post('/helpful', [RatingController::class, 'markHelpful']); Route::post('/not-helpful', [RatingController::class, 'markNotHelpful']); Route::post('/approve', [RatingController::class, 'approve']); Route::post('/reject', [RatingController::class, 'reject']); Route::post('/feature', [RatingController::class, 'feature']); }); }); /* |-------------------------------------------------------------------------- | Tip Routes |-------------------------------------------------------------------------- */ Route::prefix('tips')->group(function () { Route::post('/calculate', [TipController::class, 'calculate']); Route::prefix('{tip}')->group(function () { Route::get('/', [TipController::class, 'show']); Route::post('/process-payment', [TipController::class, 'processPayment']); }); }); }); });