redirect()->route('login')); // --- AUTHENTICATED ROUTES --- Route::middleware(['auth', 'verified', 'active.user'])->group(function () { // --- 1. DASHBOARD & INSIGHTS --- Route::get('/dashboard', [DashboardController::class, 'index'])->name('dashboard'); Route::get('/medical/insights', [MedicalDashboardController::class, 'index'])->name('medical.dashboard'); // --- 2. CATS MANAGEMENT (Core Module) --- Route::prefix('cats')->name('cats.')->group(function () { // Bulk Weight Updates Route::get('/bulk-weight', [CatController::class, 'bulkWeightPage'])->name('bulk-weight'); Route::get('/weight-template', [CatController::class, 'downloadWeightTemplate'])->name('weight-template'); Route::post('/bulk-weight', [CatController::class, 'uploadWeight'])->name('bulk-weight.post'); // Registrasi & Pedigree Multi-Asosiasi Route::get('/{cat}/pedigree', [CatRegistrationController::class, 'index'])->name('pedigree'); Route::post('/{cat}/registrations', [CatRegistrationController::class, 'store'])->name('registrations.store'); Route::put('/{cat}/registrations/{registration}', [CatRegistrationController::class, 'update'])->name('registrations.update'); Route::delete('/{cat}/registrations/{registration}', [CatRegistrationController::class, 'destroy'])->name('registrations.destroy'); Route::post('/{cat}/registrations/{registration}/documents', [CatRegistrationController::class, 'storeDocument'])->name('registrations.documents.store'); Route::get('/{cat}/registrations/{registration}/documents/{document}/show', [CatRegistrationController::class, 'showDocument'])->name('registrations.documents.show'); Route::get('/{cat}/registrations/{registration}/documents/{document}/download', [CatRegistrationController::class, 'downloadDocument'])->name('registrations.documents.download'); Route::delete('/{cat}/registrations/{registration}/documents/{document}', [CatRegistrationController::class, 'destroyDocument'])->name('registrations.documents.destroy'); // Alias lama dipertahankan agar bookmark/view lama tidak gagal. Route::post('/{cat}/upload-pedigree', [CatController::class, 'uploadPedigree'])->name('upload-pedigree'); // Reports & PDF Route::get('/{cat}/pdf', [CatController::class, 'downloadPdf'])->name('pdf'); Route::get('/{cat}/medical-report', [CatController::class, 'downloadReport'])->name('medical-report'); }); Route::resource('cats', CatController::class); // --- 3. MEDICAL & TREATMENTS (Operasional) --- // Medical Records (Individual & Bulk) Route::prefix('medical-records')->name('medical-records.')->group(function () { Route::get('/create/{cat}', [MedicalRecordController::class, 'create'])->name('create'); // Perbaikan parameter Route::post('/store', [MedicalRecordController::class, 'store'])->name('store'); Route::get('/bulk', [MedicalRecordController::class, 'bulkCreate'])->name('bulk.create'); Route::post('/bulk', [MedicalRecordController::class, 'bulkStore'])->name('bulk.store'); }); // Treatment Log (Rekam Medis Klinis) Route::resource('treatments', TreatmentController::class); Route::patch('/matting/{matting}/status', [MattingController::class, 'updateStatus'])->name('matting.status'); Route::resource('matting', MattingController::class); // Complete treatment - back to healthy Route::patch('/cats/{cat}/complete-treatment', [App\Http\Controllers\CatController::class, 'completeTreatment']) ->name('cats.complete-treatment'); // API Helpers Route::get('/api/cats/{id}', [MattingController::class, 'getCatData'])->name('api.cat.details'); // --- 4. MASTER DATA --- Route::post('/categories/recategorize', [CategoryController::class, 'recategorizeAll'])->name('categories.recategorize'); Route::resource('categories', CategoryController::class); // --- 5. LOGISTIK & INVENTORI --- Route::prefix('inventory')->name('inventory.')->group(function () { // Medicines 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 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 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 Route::patch('/update-stock/{type}/{id}', [InventoryController::class, 'updateStock'])->name('update-stock'); }); // --- 6. 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'); }); // --- 7. ADMINISTRATOR & PELAPORAN --- Route::prefix('admin')->name('admin.')->group(function () { // Roles & Permissions Route::resource('roles', RoleController::class)->except(['show']); // User Management Route::patch('/users/{user}/status', [UserController::class, 'toggleStatus'])->name('users.status'); Route::patch('/users/{user}/password', [UserController::class, 'changePassword'])->name('users.password'); Route::resource('users', UserController::class); // Audit Trail (Activity Logs) Route::prefix('logs')->name('logs.')->group(function() { Route::get('/', [UserController::class, 'activityLogs'])->name('index'); Route::get('/export', [UserController::class, 'exportLogs'])->name('export'); Route::delete('/clear', [UserController::class, 'clearLogs'])->name('clear'); }); // 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 Archive 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'); }); }); // 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';