- 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.
152 lines
8.0 KiB
PHP
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);
|
|
});
|
|
});
|