group(function () { Route::post('/register', [AuthController::class, 'register']); Route::post('/login', [AuthController::class, 'login']); Route::middleware('auth:sanctum')->group(function () { Route::get('/me', [AuthController::class, 'me']); // Alias to support clients calling /api/auth/user Route::get('/user', [AuthController::class, 'me']); Route::post('/logout', [AuthController::class, 'logout']); Route::post('/logout-all', [AuthController::class, 'logoutAll']); }); }); // Protected API routes Route::middleware('auth:sanctum')->group(function () { // Client management // IMPORTANT: Specific routes must come before apiResource Route::get('/clients/searchBy', [ClientController::class, 'searchBy']); Route::apiResource('clients', ClientController::class); Route::apiResource('client-groups', ClientGroupController::class); Route::apiResource('client-locations', ClientLocationController::class); Route::get('clients/{clientId}/locations', [ClientLocationController::class, 'getLocationsByClient']); // Contact management Route::apiResource('contacts', ContactController::class); Route::get('clients/{clientId}/contacts', [ContactController::class, 'getContactsByClient']); Route::apiResource('client-categories', ClientCategoryController::class); // Fournisseur management Route::get('/fournisseurs/searchBy', [FournisseurController::class, 'searchBy']); Route::apiResource('fournisseurs', FournisseurController::class); Route::get('fournisseurs/{fournisseurId}/contacts', [ContactController::class, 'getContactsByFournisseur']); // Product management Route::get('/products/searchBy', [ProductController::class, 'searchBy']); Route::get('/products/low-stock', [ProductController::class, 'lowStock']); Route::get('/products/by-category', [ProductController::class, 'byCategory']); Route::get('/products/statistics', [ProductController::class, 'statistics']); Route::apiResource('products', ProductController::class); Route::patch('/products/{id}/stock', [ProductController::class, 'updateStock']); // Product Category management Route::get('/product-categories/search', [ProductCategoryController::class, 'search']); Route::get('/product-categories/active', [ProductCategoryController::class, 'active']); Route::get('/product-categories/roots', [ProductCategoryController::class, 'roots']); Route::get('/product-categories/hierarchical', [ProductCategoryController::class, 'hierarchical']); Route::get('/product-categories/statistics', [ProductCategoryController::class, 'statistics']); Route::apiResource('product-categories', ProductCategoryController::class); Route::patch('/product-categories/{id}/toggle-active', [ProductCategoryController::class, 'toggleActive']); // Employee management Route::get('/employees/searchBy', [EmployeeController::class, 'searchBy']); Route::get('/employees/thanatopractitioners', [EmployeeController::class, 'getThanatopractitioners']); Route::apiResource('employees', EmployeeController::class); // Thanatopractitioner management Route::apiResource('thanatopractitioners', ThanatopractitionerController::class); Route::get('employees/{employeeId}/thanatopractitioners', [ThanatopractitionerController::class, 'getByEmployee']); Route::get('/thanatopractitioners/{id}/documents', [PractitionerDocumentController::class, 'getByThanatopractitioner']); // Practitioner Document management Route::get('/practitioner-documents/searchBy', [PractitionerDocumentController::class, 'searchBy']); Route::get('/practitioner-documents/expiring', [PractitionerDocumentController::class, 'getExpiringDocuments']); Route::apiResource('practitioner-documents', PractitionerDocumentController::class); Route::patch('/practitioner-documents/{id}/verify', [PractitionerDocumentController::class, 'verifyDocument']); });