Files
voltcerto/routes/api.php
Luis Medon e488ae3342 Add feature tests, unit tests, and configuration for Laravel application
- Created ExampleTest and RoutesTest for basic application response and route testing.
- Implemented IsolatedDatabaseTestCase for isolated database testing.
- Added unit tests for various models and services including Contract, CPE, and LeadDetail.
- Developed request validation tests for CreateClientRequest, UpdateClientRequest, and ContractRequest.
- Introduced Vite configuration for asset management in the Laravel application.
2026-10-29 11:30:06 +00:00

75 lines
5.0 KiB
PHP

<?php
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\Api\{
AuthController, ClientController, ContractController, LeadController,
DashboardController, UserController, AccessController, ResourceController, AdminController
};
Route::post('login', [AuthController::class, 'login'])->middleware('throttle:10,1');
Route::post('password/email', [AuthController::class, 'sendResetLink'])->middleware('throttle:5,1');
Route::post('password/reset', [AuthController::class, 'resetPassword'])->middleware('throttle:5,1');
Route::middleware(['auth:sanctum', \App\Http\Middleware\EnsureApiUser::class])->group(function () {
Route::post('logout', [AuthController::class, 'logout']);
Route::post('refresh', [AuthController::class, 'refresh']);
Route::get('check-token', [AuthController::class, 'checkToken']);
Route::get('me', [AuthController::class, 'user']);
Route::get('dashboard', [DashboardController::class, 'index']);
Route::get('analytics', [DashboardController::class, 'analytics'])->middleware('role:administracao');
Route::post('user/pin', [UserController::class, 'savePin']);
Route::post('user/check-pin', [UserController::class, 'checkPin'])->middleware('throttle:10,1');
Route::prefix('clients')->group(function () {
Route::get('options', [ClientController::class, 'options']);
Route::get('search/name', [ClientController::class, 'searchName']);
Route::post('search/id', [ClientController::class, 'searchID']);
Route::get('{id}/detail', [ClientController::class, 'detail'])->whereNumber('id');
});
Route::apiResource('clients', ClientController::class)->parameters(['clients' => 'id'])->whereNumber('id');
Route::prefix('contracts')->group(function () {
Route::get('options', [ContractController::class, 'options']);
Route::get('export', [ContractController::class, 'export'])->middleware('can:view_contract_summary');
Route::delete('bulk', [ContractController::class, 'bulkDestroy']);
Route::get('{id}/edit', [ContractController::class, 'edit'])->whereNumber('id');
Route::get('{id}/renew', [ContractController::class, 'renewalOptions'])->whereNumber('id');
Route::post('{id}/renew', [ContractController::class, 'renew'])->whereNumber('id');
Route::get('{id}/history', [ContractController::class, 'history'])->whereNumber('id');
Route::get('{id}/history/{historyId}', [ContractController::class, 'showHistory'])->whereNumber(['id', 'historyId']);
Route::put('{id}/history/{historyId}', [ContractController::class, 'updateHistory'])->whereNumber(['id', 'historyId']);
Route::delete('{id}/history/{historyId}', [ContractController::class, 'destroyHistory'])->whereNumber(['id', 'historyId']);
});
Route::apiResource('contracts', ContractController::class)->parameters(['contracts' => 'id'])->whereNumber('id');
Route::get('leads/options', [LeadController::class, 'options']);
Route::put('leads/{id}/convert', [LeadController::class, 'convert'])->whereNumber('id');
Route::apiResource('leads', LeadController::class)->parameters(['leads' => 'id'])->whereNumber('id');
Route::middleware('role:admin')->group(function () {
Route::get('users/options', [UserController::class, 'options']);
Route::post('users/{user}/password-reset', [UserController::class, 'sendPasswordResetLink'])->whereNumber('user');
Route::apiResource('users', UserController::class)->whereNumber('user');
Route::prefix('admin')->group(function () {
Route::get('info', [AdminController::class, 'info']);
Route::get('phpinfo', [AdminController::class, 'phpInfo']);
Route::post('runMigrations', [AdminController::class, 'runMigrations']);
Route::post('testEmail', [AdminController::class, 'testEmail'])->middleware('throttle:5,1');
Route::get('access/roles-permissions', [AccessController::class, 'roles']);
Route::post('access/roles/{role}/permissions', [AccessController::class, 'updatePermissions'])->whereNumber('role');
Route::get('access/users', [AccessController::class, 'users']);
Route::post('access/users/{user}/roles', [AccessController::class, 'updateRoles'])->whereNumber('user');
});
});
Route::middleware('can:manage_resources')->prefix('resources')->group(function () {
$resources = 'power_tiers|contract_types|payment_methods|typologies|cui_tiers|suppliers|contract-statuses';
Route::get('{resource}', [ResourceController::class, 'index'])->where('resource', $resources);
Route::post('{resource}', [ResourceController::class, 'store'])->where('resource', $resources);
Route::get('{resource}/{id}', [ResourceController::class, 'show'])->where('resource', $resources)->whereNumber('id');
Route::put('{resource}/{id}', [ResourceController::class, 'update'])->where('resource', $resources)->whereNumber('id');
Route::delete('{resource}/{id}', [ResourceController::class, 'destroy'])->where('resource', $resources)->whereNumber('id');
});
});