148 lines
6.6 KiB
PHP
148 lines
6.6 KiB
PHP
|
|
<?php
|
||
|
|
|
||
|
|
declare(strict_types=1);
|
||
|
|
|
||
|
|
use Illuminate\Support\Facades\Route;
|
||
|
|
use Modules\RestaurantDelivery\Http\Controllers\API\DeliveryController;
|
||
|
|
use Modules\RestaurantDelivery\Http\Controllers\API\DeliveryZoneController;
|
||
|
|
use Modules\RestaurantDelivery\Http\Controllers\API\RatingController;
|
||
|
|
use Modules\RestaurantDelivery\Http\Controllers\API\RiderController;
|
||
|
|
use Modules\RestaurantDelivery\Http\Controllers\API\TipController;
|
||
|
|
use Modules\RestaurantDelivery\Http\Controllers\API\ZonePricingRuleController;
|
||
|
|
|
||
|
|
/*
|
||
|
|
|--------------------------------------------------------------------------
|
||
|
|
| Restaurant Delivery API Routes
|
||
|
|
|--------------------------------------------------------------------------
|
||
|
|
*/
|
||
|
|
|
||
|
|
Route::prefix('v1/restaurant-delivery')->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']);
|
||
|
|
});
|
||
|
|
});
|
||
|
|
});
|
||
|
|
});
|