This commit is contained in:
mrKamoo
2026-09-30 16:27:32 +02:00
commit 310724708f
147 changed files with 21327 additions and 0 deletions
+9
View File
@@ -0,0 +1,9 @@
<?php
use App\Http\Controllers\Api\SignatureController;
use Illuminate\Support\Facades\Route;
// Appelé par l'add-in Outlook (jeton Entra NAA en Bearer).
Route::prefix('v1')->middleware(['entra.token', 'throttle:signature'])->group(function () {
Route::get('/signature', [SignatureController::class, 'show'])->name('api.signature');
});
+7
View File
@@ -0,0 +1,7 @@
<?php
use Illuminate\Support\Facades\Schedule;
// Synchro incrémentale (delta) toutes les 15 minutes, complète chaque nuit.
Schedule::command('signature:sync')->everyFifteenMinutes()->withoutOverlapping(10);
Schedule::command('signature:sync --full')->dailyAt('02:30')->withoutOverlapping(60);
+54
View File
@@ -0,0 +1,54 @@
<?php
use App\Http\Controllers\Admin\AgentController;
use App\Http\Controllers\Admin\AssignmentController;
use App\Http\Controllers\Admin\DashboardController;
use App\Http\Controllers\Admin\SyncController;
use App\Http\Controllers\Admin\TemplateController;
use App\Http\Controllers\Auth\EntraLoginController;
use App\Http\Controllers\Portal\PortalController;
use Illuminate\Support\Facades\Route;
Route::redirect('/', '/me');
// SSO Entra
Route::get('/login', [EntraLoginController::class, 'redirect'])->name('login');
Route::get('/auth/callback', [EntraLoginController::class, 'callback'])->name('auth.callback');
Route::post('/logout', [EntraLoginController::class, 'logout'])->name('logout')->middleware('auth');
// Portail agent (tout agent synchronisé)
Route::middleware('auth')->group(function () {
Route::get('/me', PortalController::class)->name('portal.home');
});
// Back-office : réseau interne + rôle éditeur minimum
Route::prefix('admin')->middleware(['admin.network', 'auth', 'role:editor'])->name('admin.')->group(function () {
Route::get('/', DashboardController::class)->name('dashboard');
// Templates — éditeur : brouillons ; administrateur : publication, défaut, suppression
Route::get('/templates', [TemplateController::class, 'index'])->name('templates.index');
Route::get('/templates/create', [TemplateController::class, 'create'])->name('templates.create');
Route::post('/templates', [TemplateController::class, 'store'])->name('templates.store');
Route::post('/templates/preview', [TemplateController::class, 'preview'])->name('templates.preview');
Route::get('/templates/{template}', [TemplateController::class, 'edit'])->name('templates.edit');
Route::put('/templates/{template}', [TemplateController::class, 'update'])->name('templates.update');
Route::post('/templates/{template}/versions/{version}/restore', [TemplateController::class, 'restore'])->name('templates.restore');
Route::middleware('role:admin')->group(function () {
Route::post('/templates/{template}/publish', [TemplateController::class, 'publish'])->name('templates.publish');
Route::post('/templates/{template}/default', [TemplateController::class, 'makeDefault'])->name('templates.default');
Route::delete('/templates/{template}', [TemplateController::class, 'destroy'])->name('templates.destroy');
Route::get('/affectations', [AssignmentController::class, 'index'])->name('assignments.index');
Route::post('/affectations', [AssignmentController::class, 'store'])->name('assignments.store');
Route::put('/affectations/{assignment}', [AssignmentController::class, 'update'])->name('assignments.update');
Route::delete('/affectations/{assignment}', [AssignmentController::class, 'destroy'])->name('assignments.destroy');
Route::post('/synchro', SyncController::class)->name('sync');
});
// Agents : simulation « qui reçoit quoi » et recherche pour l'aperçu
Route::get('/agents', [AgentController::class, 'index'])->name('agents.index');
Route::get('/agents/recherche', [AgentController::class, 'lookup'])->name('agents.lookup');
Route::get('/agents/{agent}', [AgentController::class, 'show'])->name('agents.show');
});