===== STRUCTURE =====
.
├── api.php
├── console.php
├── output.txt
└── web.php

1 directory, 4 files

===== CONTENU DES FICHIERS =====

----- ./output.txt -----

----- ./web.php -----
<?php

use Illuminate\Support\Facades\Route;
use App\Http\Controllers\Admin\UserController;
use App\Http\Controllers\Admin\CityController;
use App\Http\Controllers\Admin\ListingController;
use App\Http\Controllers\Admin\VisitController;
use App\Http\Controllers\Admin\DeplacementController;
use App\Http\Controllers\Admin\PermissionController;
use App\Http\Controllers\Admin\DashboardController;
use App\Http\Controllers\Admin\SalaryController;
use App\Http\Controllers\Admin\TicketController;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;



Route::get('/login', function () {
    return view('auth.login');
})->name('login');

Route::post('/login', function (Request $request) {
    $credentials = $request->only('email', 'password');

    if (Auth::attempt($credentials)) {
        $request->session()->regenerate();
        return redirect()->intended('/admin/dashboard');
    }

    return back()->withErrors([
        'email' => 'Identifiants invalides.',
    ]);
});

Route::get('/', function () {
    return redirect('/admin/dashboard');
});


Route::prefix('admin')->name('admin.')->middleware(['auth', 'adminOrManager'])->group(function () {

    // Dashboard
    Route::get('/dashboard', [DashboardController::class, 'index'])->name('dashboard');

    // Users
    Route::get('/users', [UserController::class, 'index'])->name('users.index');
    Route::get('/users/create', [UserController::class, 'create'])->name('users.create');
    Route::post('/users', [UserController::class, 'store'])->name('users.store');
    Route::get('/users/{user}/edit', [UserController::class, 'edit'])->name('users.edit');
    Route::put('/users/{user}', [UserController::class, 'update'])->name('users.update');
    Route::get('/users/{user}', [UserController::class, 'show'])->name('users.show');
    Route::get('/users/{user}/pdf', [UserController::class, 'exportPdf'])->name('users.pdf');

    // Cities
    Route::resource('cities', CityController::class);
    Route::post('/cities/{city}/delegues', [CityController::class, 'attachDelegues'])->name('cities.delegues');

    // Listings
    Route::resource('listings', ListingController::class);

    // Visits
    Route::get('/visits/progress', [VisitController::class, 'progress'])->name('visits.progress');

    Route::get('/visits', [VisitController::class, 'index'])->name('visits.index');
    Route::get('/visits/export', [VisitController::class, 'exportXls'])->name('visits.export');
    Route::get('/visits/{visit}', [VisitController::class, 'show'])->name('visits.show');
    Route::put('/visits/{visit}/status', [VisitController::class, 'updateStatus'])->name('visits.status');

    // Deplacements
    Route::resource('deplacements', DeplacementController::class);

    // Permissions
    Route::get('/permissions', [PermissionController::class, 'index'])->name('permissions.index');
    Route::get('/permissions/{permission}', [PermissionController::class, 'show'])->name('permissions.show');
    Route::put('/permissions/{permission}/status', [PermissionController::class, 'updateStatus'])->name('permissions.status');

    // Salaries
    Route::get('/salaries', [SalaryController::class,'index'])->name('salaries.index');
    Route::get('/salaries/{user}', [SalaryController::class,'show'])->name('salaries.show');
    Route::put('/salaries/{user}/update', [SalaryController::class,'updateFixed'])->name('salaries.update');
    Route::put('/salaries/prime/update', [SalaryController::class,'updatePrime'])->name('salaries.prime');

    //Location 
    Route::get('/users/{user}/tracking', [UserController::class, 'tracking'])->name('tracking');

    // routes/web.php (ou admin.php si tu as un group admin)
    Route::get('tickets', [App\Http\Controllers\Admin\TicketController::class, 'index'])->name('tickets.index');
    Route::get('tickets/{visit}', [App\Http\Controllers\Admin\TicketController::class, 'show'])->name('tickets.show');
    Route::put('tickets/{visit}/update', [App\Http\Controllers\Admin\TicketController::class, 'update'])->name('tickets.update');


});

----- ./console.php -----
<?php

use Illuminate\Foundation\Inspiring;
use Illuminate\Support\Facades\Artisan;

Artisan::command('inspire', function () {
    $this->comment(Inspiring::quote());
})->purpose('Display an inspiring quote');

----- ./api.php -----
<?php

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;

/*
|--------------------------------------------------------------------------
| API Routes - GloPharma
|--------------------------------------------------------------------------
| Toutes les routes de l’application mobile GloPharma
| Organisées par module
|--------------------------------------------------------------------------
*/

use App\Http\Controllers\API\AuthController;
use App\Http\Controllers\API\UserController;
use App\Http\Controllers\API\CityController;
use App\Http\Controllers\API\ListingController;
use App\Http\Controllers\API\ProductController;
use App\Http\Controllers\API\VisitController;
use App\Http\Controllers\API\VisitTypeController;
use App\Http\Controllers\API\VisitProductController;
use App\Http\Controllers\API\DeplacementController;
use App\Http\Controllers\API\ExpenseController;
use App\Http\Controllers\API\PermissionController;
use App\Http\Controllers\API\CycleController;
use App\Http\Controllers\API\ObjectiveController;
use App\Http\Controllers\API\WeeklyProgramController;
use App\Http\Controllers\API\ActionRequestController;
use App\Http\Controllers\API\AppointmentController;
use App\Http\Controllers\API\DashboardController;
use App\Http\Controllers\API\ExpenseDashboardController;
use App\Http\Controllers\API\NotificationController;
use App\Http\Controllers\API\LocationController;
use App\Http\Controllers\API\WorkSessionController;
use App\Http\Controllers\API\VisitInProgressController;




/*
|--------------------------------------------------------------------------
| 🔐 AUTHENTIFICATION
|--------------------------------------------------------------------------
*/
Route::prefix('auth')->group(function () {
    Route::post('register', [AuthController::class, 'register']);
    Route::post('login', [AuthController::class, 'login']);

    Route::middleware('auth:api')->group(function () {
        Route::get('profile', [AuthController::class, 'profile']);
        Route::post('logout', [AuthController::class, 'logout']);
        Route::post('refresh', [AuthController::class, 'refresh']);
    });
});

/*
|--------------------------------------------------------------------------
| 🔒 ROUTES PROTÉGÉES (auth:api)
|--------------------------------------------------------------------------
*/
Route::middleware('auth:api')->group(function () {

    /*
    |--------------------------------------------------------------------------
    | 👤 PROFIL UTILISATEUR
    |--------------------------------------------------------------------------
    */
    Route::get('/profiles', [UserController::class, 'index']);
    Route::get('/profile', [UserController::class, 'show']);
    Route::put('/profile', [UserController::class, 'update']);
    Route::put('/profile/update', [UserController::class, 'updateProfile']);

    /*
    |--------------------------------------------------------------------------
    | 🗺️ VILLES & LISTINGS
    |--------------------------------------------------------------------------
    */
    Route::get('/cities', [CityController::class, 'userCities']);
    Route::get('/listings', [ListingController::class, 'index']);
    Route::get('/listings/{id}', [ListingController::class, 'show']);
    Route::post('/listings', [ListingController::class, 'store']);
    Route::put('/listings/{id}', [ListingController::class, 'update']);
    Route::patch('/listings/{id}/coordinates', [ListingController::class, 'updateCoordinates']);

    /*
    |--------------------------------------------------------------------------
    | 👣 VISITES
    |--------------------------------------------------------------------------
    */
    Route::get('/visit-types', [VisitTypeController::class, 'index']);
    Route::get('/visits', [VisitController::class, 'index']);
    Route::get('/visits/valide', [VisitController::class, 'valideVisits']);
    Route::get('/visits/invalide', [VisitController::class, 'invalideVisits']);
    Route::get('/visits/double', [VisitController::class, 'doubleVisits']);
    Route::post('/visits', [VisitController::class, 'store']);
    Route::get('/visits/{id}', [VisitController::class, 'show']);
    Route::put('/visits/{id}', [VisitController::class, 'update']);
    Route::delete('/visits/{id}', [VisitController::class, 'destroy']);


    // start visit
    Route::post('/visits-progress/start', [VisitInProgressController::class, 'start']);

    // finish visit
    Route::post('/visits-progress/finish', [VisitInProgressController::class, 'finish']);

    // annuler visite (optionnel mais intelligent)
    Route::post('/visits-progress/cancel', [VisitInProgressController::class, 'cancel']);

    /*
    |--------------------------------------------------------------------------
    | 💊 PRODUITS
    |--------------------------------------------------------------------------
    */
    Route::get('/products', [ProductController::class, 'index']);

    /*
    |--------------------------------------------------------------------------
    | 🕒 DÉPLACEMENTS
    |--------------------------------------------------------------------------
    */
    Route::get('/deplacements', [DeplacementController::class, 'myDeplacements']);
    Route::patch('/deplacements/{id}/status', [DeplacementController::class, 'updateStatus']);

    /*
    |--------------------------------------------------------------------------
    | 🕓 PERMISSIONS (ABSENCES)
    |--------------------------------------------------------------------------
    */
    Route::get('/permissions', [PermissionController::class, 'index']);
    Route::post('/permissions', [PermissionController::class, 'store']);

    /*
    |--------------------------------------------------------------------------
    | 💸 NOTES DE FRAIS
    |--------------------------------------------------------------------------
    */
    Route::get('/expenses', [ExpenseController::class, 'index']);
    Route::post('/expenses', [ExpenseController::class, 'store']);
    Route::get('/expense-dashboard', [ExpenseDashboardController::class, 'index']);

    /*
    |--------------------------------------------------------------------------
    | 🧾 ACTIONS PROMOTIONNELLES
    |--------------------------------------------------------------------------
    */
    Route::get('/actions', [ActionRequestController::class, 'index']);
    Route::post('/actions', [ActionRequestController::class, 'store']);

    /*
    |--------------------------------------------------------------------------
    | 🎯 OBJECTIFS & CYCLES
    |--------------------------------------------------------------------------
    */
    Route::get('/cycles', [CycleController::class, 'index']);
    Route::get('/objectives', [ObjectiveController::class, 'index']);
    Route::get('/program', [WeeklyProgramController::class, 'userProgram']);

    /*
    |--------------------------------------------------------------------------
    | 📅 RENDEZ-VOUS
    |--------------------------------------------------------------------------
    */
    Route::get('/appointments', [AppointmentController::class, 'index']);
    Route::post('/appointments', [AppointmentController::class, 'store']);
    Route::delete('/appointments/{id}', [AppointmentController::class, 'destroy']);

    /*
    |--------------------------------------------------------------------------
    | 📊 DASHBOARD
    |--------------------------------------------------------------------------
    */
    Route::get('/dashboard', [DashboardController::class, 'index']);
    Route::get('/today', [VisitController::class, 'today']);

    /*
    |--------------------------------------------------------------------------
    | 🔔 NOTIFICATIONS
    |--------------------------------------------------------------------------
    */
    Route::get('/notifications', [NotificationController::class, 'index']);
    Route::get('/notifications/unread-count', [NotificationController::class, 'unreadCount']);
    Route::post('/notifications/{id}/read', [NotificationController::class, 'markAsRead']);
    Route::post('/notifications/read-all', [NotificationController::class, 'markAllAsRead']);


    /*
    |--------------------------------------------------------------------------
    | Location
    |--------------------------------------------------------------------------
    */
    Route::post('/locations', [LocationController::class, 'store']);
    Route::post('/locations/bulk', [LocationController::class, 'bulk']);
    Route::post('/work/start', [WorkSessionController::class, 'start']);
    Route::post('/work/end', [WorkSessionController::class, 'end']);




});

/*
|--------------------------------------------------------------------------
| 🌐 ROUTES PUBLIQUES
|--------------------------------------------------------------------------
*/
Route::get('/version', function () {
    return response()->json([
        'app' => 'GloPharma API',
        'version' => 'v1.0.0',
        'maintained_by' => 'GloPharma Team 🇲🇦'
    ]);
});