Files
GLOC/routes/api.php
2026-01-23 19:18:52 +07:00

80 lines
3.8 KiB
PHP

<?php
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\GeoTrackController;
use App\Http\Controllers\GeoPlanController;
use App\Http\Controllers\GridController;
use App\Http\Controllers\MerchantController;
use App\Http\Controllers\StaffController;
/*
|--------------------------------------------------------------------------
| API Routes
|--------------------------------------------------------------------------
|
| GeoReach Intelligence API Routes
|
*/
// ============ Merchants Routes ============
Route::get('/merchants', [MerchantController::class, 'index']);
// ============ Grid Routes ============
Route::get('/grids', [GridController::class, 'index']);
Route::get('/grids/generate', [GridController::class, 'generate']);
Route::get('/grids/stats', [GridController::class, 'stats']);
Route::post('/grids/{gridId}/download', [GridController::class, 'download']);
// ============ GeoTrack Routes ============
Route::get('/sales-routes', [GeoTrackController::class, 'index']);
Route::get('/sales-routes/dates', [GeoTrackController::class, 'dates']);
Route::get('/sales-routes/sales', [GeoTrackController::class, 'sales']);
Route::get('/sales-routes/{id}', [GeoTrackController::class, 'show']);
Route::post('/sales-routes/waypoints', [GeoTrackController::class, 'storeWaypoint']);
// ============ GeoPlan Routes ============
Route::get('/sales-plans', [GeoPlanController::class, 'index']);
Route::get('/sales-plans/dates', [GeoPlanController::class, 'dates']);
Route::get('/sales-plans/sales', [GeoPlanController::class, 'sales']);
Route::get('/sales-plans/{id}', [GeoPlanController::class, 'show']);
Route::post('/sales-plans', [GeoPlanController::class, 'store']);
Route::put('/sales-plans/{id}', [GeoPlanController::class, 'update']);
Route::delete('/sales-plans/{id}', [GeoPlanController::class, 'destroy']);
Route::post('/sales-plans/{id}/optimize', [GeoPlanController::class, 'optimize']);
Route::post('/sales-plans/{id}/add-target', [GeoPlanController::class, 'addTarget']);
Route::put('/sales-plans/{id}/target/{targetId}', [GeoPlanController::class, 'updateTarget']);
Route::delete('/sales-plans/{id}/target/{targetId}', [GeoPlanController::class, 'removeTarget']);
Route::post('/sales-plans/assign-target', [GeoPlanController::class, 'autoAssignTarget']);
// ============ GeoTrack Mobile API (Flutter) ============
Route::prefix('mobile')->group(function () {
Route::post('/login', [GeoTrackController::class, 'mobileLogin']);
Route::post('/checkin', [GeoTrackController::class, 'mobileCheckin']);
Route::post('/checkout', [GeoTrackController::class, 'mobileCheckout']);
Route::post('/waypoints/batch', [GeoTrackController::class, 'storeBatchWaypoints']);
Route::get('/route/today', [GeoTrackController::class, 'getTodayRoute']);
Route::get('/status', [GeoTrackController::class, 'getTrackingStatus']);
// New endpoints
Route::get('/schedules', [GeoPlanController::class, 'getMobileSchedule']);
Route::post('/schedules/{id}/target', [GeoPlanController::class, 'addTarget']);
Route::post('/schedules/{id}/target/{targetId}/checkin', [GeoPlanController::class, 'checkinTarget']);
Route::delete('/schedules/{id}/target/{targetId}', [GeoPlanController::class, 'removeTarget']);
Route::post('/prospects', [\App\Http\Controllers\CustomerController::class, 'store']);
Route::post('/profile', [GeoTrackController::class, 'updateProfile']);
Route::post('/change-password', [GeoTrackController::class, 'changePassword']);
});
// ============ Master Data: Staff ============
Route::apiResource('staff', StaffController::class);
Route::apiResource('customers', \App\Http\Controllers\CustomerController::class);
// ============ Health Check ============
Route::get('/health', function () {
return response()->json([
'status' => 'ok',
'timestamp' => now()->toISOString(),
]);
});