Files
kulakpos_web/public/restaurant/Modules/RestaurantDelivery/routes/api.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']);
});
});
});
});