2025-11-12 16:44:12 +03:00

120 lines
6.0 KiB
PHP

<?php
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\Api\AuthController;
use App\Http\Controllers\Api\ClientController;
use App\Http\Controllers\Api\ClientGroupController;
use App\Http\Controllers\Api\ClientLocationController;
use App\Http\Controllers\Api\ContactController;
use App\Http\Controllers\Api\ClientCategoryController;
use App\Http\Controllers\Api\FournisseurController;
use App\Http\Controllers\Api\ProductController;
use App\Http\Controllers\Api\ProductCategoryController;
use App\Http\Controllers\Api\EmployeeController;
use App\Http\Controllers\Api\ThanatopractitionerController;
use App\Http\Controllers\Api\PractitionerDocumentController;
use App\Http\Controllers\Api\DeceasedController;
use App\Http\Controllers\Api\InterventionController;
/*
|--------------------------------------------------------------------------
| API Routes
|--------------------------------------------------------------------------
|
| These routes are loaded with the "api" middleware group and are prefixed
| with /api automatically via bootstrap/app.php.
|
*/
Route::prefix('auth')->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']);
// Deceased Routes
Route::prefix('deceased')->group(function () {
Route::get('/searchBy', [DeceasedController::class, 'searchBy']);
Route::get('/', [DeceasedController::class, 'index']);
Route::post('/', [DeceasedController::class, 'store']);
Route::get('/{deceased}', [DeceasedController::class, 'show']);
Route::put('/{deceased}', [DeceasedController::class, 'update']);
Route::delete('/{deceased}', [DeceasedController::class, 'destroy']);
});
// Intervention Routes
Route::prefix('interventions')->group(function () {
Route::get('/', [InterventionController::class, 'index']);
Route::post('/', [InterventionController::class, 'store']);
Route::get('/{intervention}', [InterventionController::class, 'show']);
Route::put('/{intervention}', [InterventionController::class, 'update']);
Route::delete('/{intervention}', [InterventionController::class, 'destroy']);
Route::patch('/{intervention}/status', [InterventionController::class, 'changeStatus']);
});
});