Files
voltcerto/routes/web.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

152 lines
8.0 KiB
PHP

<?php
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\Auth\ApiLoginController;
use App\Http\Controllers\Auth\ForgotPasswordController;
use App\Http\Controllers\Auth\ResetPasswordController;
use App\Http\Controllers\{
UserController,
HomeController,
ClientController,
ContractController,
RolePermissionController,
AdminController,
UserAccessController,
LeadController,
AnalyticalController
};
use App\Http\Controllers\Resources\{
PowerTierController,
ContractTypeController,
PaymentMethodController,
TypologyController,
CuiTierController,
SupplierController,
ContractStatusController
};
/**
* ----------------------------------------------------------
* Public routes (login, registration, password reset)
* ----------------------------------------------------------
*/
Route::middleware(['web'])->group(function () {
// API login
Route::get('login', [ApiLoginController::class, 'showLoginForm'])->name('login');
Route::post('login', [ApiLoginController::class, 'login'])->middleware('throttle:10,1')->name('login.post');
Route::post('logout', [ApiLoginController::class, 'logout'])->name('logout');
// Password reset
Route::get('password/reset', [ForgotPasswordController::class, 'showLinkRequestForm'])->name('password.request');
Route::post('password/email', [ForgotPasswordController::class, 'sendResetLinkEmail'])->middleware('throttle:5,1')->name('password.email');
Route::get('password/reset/{token}', [ResetPasswordController::class, 'showResetForm'])->name('password.reset');
Route::post('password/reset', [ResetPasswordController::class, 'reset'])->middleware('throttle:5,1')->name('password.update');
});
/**
* ----------------------------------------------------------
* Private routes (only for authenticated API users)
* ----------------------------------------------------------
*/
Route::middleware(['web', 'auth.session'])->group(function () {
// Home/Dashboard
Route::get('/', [HomeController::class, 'index'])->name('home');
// Users (PIN management)
Route::prefix('user')->name('user.')->group(function () {
Route::post('pin', [UserController::class, 'savePin'])->name('pin.save');
Route::post('check-pin', [UserController::class, 'checkPin'])->middleware('throttle:10,1')->name('checkPin');
});
// Contracts
Route::prefix('contract')->name('contract.')->group(function () {
Route::get('list', [ContractController::class, 'index'])->name('list');
Route::get('add', [ContractController::class, 'create'])->name('add');
Route::post('store', [ContractController::class, 'store'])->name('store');
Route::get('{id}/edit', [ContractController::class, 'edit'])->name('edit');
Route::put('{id}/update', [ContractController::class, 'update'])->name('update');
Route::get('{id}/renew', [ContractController::class, 'renewForm'])->name('renew.form');
Route::post('{id}/renew', [ContractController::class, 'renew'])->name('renew');
Route::get('{id}/history', [ContractController::class, 'history'])->name('history');
Route::get('{id}/history/create', [ContractController::class, 'createHistory'])->name('history.create');
Route::post('{id}/history', [ContractController::class, 'storeHistory'])->name('history.store');
Route::get('{id}/history/{historyId}/edit', [ContractController::class, 'editHistory'])->name('history.edit');
Route::put('{id}/history/{historyId}', [ContractController::class, 'updateHistory'])->name('history.update');
Route::delete('{id}/history/{historyId}', [ContractController::class, 'destroyHistory'])->name('history.destroy');
Route::get('/contracts/export', [ContractController::class, 'export'])->middleware('can:view_contract_summary')->name('export');
Route::delete('bulk', [ContractController::class, 'bulkDestroy'])->name('bulk.destroy');
Route::delete('{id}', [ContractController::class, 'destroy'])->name('destroy');
});
// Leads
Route::prefix('lead')->name('lead.')->group(function () {
Route::get('/', [LeadController::class, 'list'])->name('list');
Route::get('/create', [LeadController::class, 'create'])->name('create');
Route::post('/', [LeadController::class, 'store'])->name('store');
Route::get('/{id}', [LeadController::class, 'show'])->name('show');
Route::get('/{id}/edit', [LeadController::class, 'edit'])->name('edit');
Route::put('/{id}', [LeadController::class, 'update'])->name('update');
Route::put('/{id}/convert', [LeadController::class, 'convert'])->name('convert');
Route::delete('/{id}', [LeadController::class, 'destroy'])->name('destroy');
});
// Clients
Route::prefix('client')->name('client.')->group(function () {
Route::get('list', [ClientController::class, 'list'])->name('list');
Route::get('add', [ClientController::class, 'add'])->name('add');
Route::get('create/{type}', [ClientController::class, 'add2step'])->name('create');
Route::post('store', [ClientController::class, 'store'])->name('store');
Route::get('detail/{id}', [ClientController::class, 'detail'])->name('detail');
Route::post('detail/{id}', [ClientController::class, 'update'])->name('update');
Route::delete('/{id}', [ClientController::class, 'destroy'])->name('destroy');
});
// Admin - Roles & Permissions
Route::middleware('role:admin')->prefix('admin/access')->name('admin.access.')->group(function () {
Route::get('/roles-permissions', [RolePermissionController::class, 'index'])->name('roles-permissions');
Route::post('/roles/{role}/permissions', [RolePermissionController::class, 'updatePermissions'])->name('roles.update-permissions');
Route::get('/users', [UserAccessController::class, 'index'])->name('users');
Route::post('/users/{user}/roles', [UserAccessController::class, 'updateRoles'])->name('users.update-roles');
});
// Analytical
Route::middleware('role:administracao')->prefix('Analytical')->name('Analytical.')->group(function () {
Route::get('/', [AnalyticalController::class, 'index'])->name('index');
});
// User management
Route::middleware('role:admin')->prefix('users')->name('users.')->group(function () {
Route::get('/', [UserController::class, 'index'])->name('index');
Route::get('/create', [UserController::class, 'create'])->name('create');
Route::post('/', [UserController::class, 'store'])->name('store');
Route::post('/{user}/password-reset', [UserController::class, 'sendPasswordResetLink'])->name('password-reset');
Route::get('/{user}/edit', [UserController::class, 'edit'])->name('edit');
Route::put('/{user}', [UserController::class, 'update'])->name('update');
Route::delete('/{user}', [UserController::class, 'destroy'])->name('destroy');
});
// Admin-only routes
Route::middleware('role:admin')->prefix('admin')->name('admin.')->group(function () {
Route::get('info', [AdminController::class, 'main'])->name('info');
Route::get('phpinfo', [AdminController::class, 'phpInfo'])->name('phpinfo');
});
// AJAX utility routes
Route::prefix('utils.ajax')->name('utils.ajax.')->group(function () {
Route::get('clients/search/name', [ClientController::class, 'searchName'])->name('clients.search.name');
Route::post('clients/search/id', [ClientController::class, 'searchID'])->name('clients.search.id');
});
// Resource management
Route::middleware('can:manage_resources')->group(function () {
Route::resource('power_tiers', PowerTierController::class);
Route::resource('contract_types', ContractTypeController::class);
Route::resource('payment_methods', PaymentMethodController::class);
Route::resource('typologies', TypologyController::class);
Route::resource('cui_tiers', CuiTierController::class);
Route::resource('suppliers', SupplierController::class);
Route::resource('contract-statuses', ContractStatusController::class);
});
});