redirect()->route('login')); // --- AUTHENTICATED ROUTES --- Route::middleware(['auth', 'verified'])->group(function () { // --- DASHBOARD & INSIGHTS --- Route::get('/dashboard', [DashboardController::class, 'index'])->name('dashboard'); Route::get('/medical/insights', [MedicalDashboardController::class, 'index'])->name('medical.dashboard'); // --- OPERASIONAL: CATS & MEDICAL --- Route::resource('cats', CatController::class); Route::get('/cats/{cat}/pdf', [CatController::class, 'downloadPdf'])->name('cats.pdf'); // Rute PDF Existing Route::resource('treatments', TreatmentController::class); Route::resource('matting', MattingController::class); // API Helpers (Data fetching untuk keperluan form dinamis - TETAP ADA) Route::get('/api/cats/{id}', [MattingController::class, 'getCatData'])->name('api.cat.details'); // --- MASTER CATEGORIES --- // Rute Sinkronisasi Kategori (Existing) Route::post('/categories/recategorize', [CategoryController::class, 'recategorizeAll'])->name('categories.recategorize'); Route::resource('categories', CategoryController::class); // --- LOGISTIK & INVENTORI (MODUL LENGKAP) --- Route::prefix('inventory')->name('inventory.')->group(function () { // Medicines (Template & Batch Upload Tetap Ada) Route::prefix('medicines')->name('medicines.')->group(function() { Route::get('/template', [MedicineController::class, 'downloadTemplate'])->name('template'); Route::post('/batch', [MedicineController::class, 'batchUpload'])->name('batch'); }); Route::resource('medicines', MedicineController::class); // Foods (Template & Batch Upload Tetap Ada) Route::prefix('foods')->name('foods.')->group(function() { Route::get('/template', [FoodController::class, 'downloadTemplate'])->name('template'); Route::post('/batch', [FoodController::class, 'batchUpload'])->name('batch'); }); Route::resource('foods', FoodController::class); // Supplies (Template & Batch Upload Tetap Ada) Route::prefix('supplies')->name('supplies.')->group(function() { Route::get('/template', [SupplyController::class, 'downloadTemplate'])->name('template'); Route::post('/batch', [SupplyController::class, 'batchUpload'])->name('batch'); }); Route::resource('supplies', SupplyController::class); // Utility: Update stok cepat (Patch Route Existing) Route::patch('/update-stock/{type}/{id}', [InventoryController::class, 'updateStock'])->name('update-stock'); }); // --- USER PROFILE --- Route::controller(ProfileController::class)->name('profile.')->group(function () { Route::get('/profile', 'edit')->name('edit'); Route::patch('/profile', 'update')->name('update'); Route::delete('/profile', 'destroy')->name('destroy'); }); /** * PERBAIKAN: ADMINISTRATOR & INTELLIGENCE CENTER * Dipindahkan keluar dari middleware 'admin' agar akses bisa diatur via Role Management. * Prefix 'admin' dan Name 'admin.' tetap dipertahankan agar link sidebar tidak rusak. */ Route::prefix('admin')->name('admin.')->group(function () { // 1. ROLE & PERMISSION MANAGEMENT (Pindah ke matriks izin) Route::prefix('roles')->name('roles.')->group(function() { Route::get('/', [RoleController::class, 'index'])->name('index'); Route::get('/create', [RoleController::class, 'create'])->name('create'); Route::post('/store', [RoleController::class, 'store'])->name('store'); Route::get('/{id}/edit', [RoleController::class, 'edit'])->name('edit'); Route::post('/{id}/update', [RoleController::class, 'update'])->name('update'); Route::delete('/{role}/destroy', [RoleController::class, 'destroy'])->name('destroy'); }); // 2. USER MANAGEMENT & LOGS (Audit Trail Lengkap) Route::resource('users', UserController::class); Route::prefix('logs')->name('logs.')->group(function() { Route::get('/', [UserController::class, 'activityLogs'])->name('index'); Route::get('/export', [UserController::class, 'exportLogs'])->name('export'); // Export Excel Audit Trail Route::delete('/clear', [UserController::class, 'clearLogs'])->name('clear'); // Bersihkan Log }); // 3. INTELLIGENCE & REPORTS (Pusat Laporan) Route::prefix('reports')->name('reports.')->group(function() { Route::get('/', [ReportController::class, 'index'])->name('index'); Route::get('/export/{module}/{format}', [ReportController::class, 'export'])->name('export'); // Matting Report: Read-Only Archive (Histori Breeding) Route::prefix('matting')->name('matting.')->group(function() { Route::get('/', [MattingReportController::class, 'index'])->name('index'); Route::get('/{id}', [MattingReportController::class, 'show'])->name('show'); Route::get('/{id}/print', [MattingReportController::class, 'printSingle'])->name('print'); }); }); // 4. GENERAL SYSTEM SETTINGS Route::prefix('settings')->name('settings.')->group(function() { Route::get('/', [SettingController::class, 'index'])->name('index'); Route::post('/update', [SettingController::class, 'update'])->name('update'); }); }); }); require __DIR__.'/auth.php';