check()) { return auth()->user()->isAdmin() ? redirect()->route('admin.dashboard') : redirect()->route('user.dashboard'); } return redirect()->route('login'); }); // ============================================================ // Authentication // ============================================================ Route::middleware('guest')->group(function () { Route::get('/login', [AuthenticatedSessionController::class, 'create'])->name('login'); Route::post('/login', [AuthenticatedSessionController::class, 'store']) ->middleware('throttle:login'); }); Route::post('/logout', [AuthenticatedSessionController::class, 'destroy']) ->middleware('auth') ->name('logout'); // ============================================================ // Admin Routes — /admin/* // ============================================================ Route::middleware(['auth', 'active', 'admin']) ->prefix('admin') ->name('admin.') ->group(function () { Route::get('/dashboard', [AdminDashboardController::class, 'index'])->name('dashboard'); // User Management Route::prefix('users')->name('users.')->group(function () { Route::get('/', [AdminUserController::class, 'index'])->name('index'); Route::get('/create', [AdminUserController::class, 'create'])->name('create'); Route::post('/', [AdminUserController::class, 'store'])->name('store'); Route::get('/{user}/edit', [AdminUserController::class, 'edit'])->name('edit'); Route::patch('/{user}/email', [AdminUserController::class, 'updateEmail'])->name('update-email'); Route::patch('/{user}/activate', [AdminUserController::class, 'activate'])->name('activate'); Route::patch('/{user}/deactivate', [AdminUserController::class, 'deactivate'])->name('deactivate'); Route::delete('/{user}', [AdminUserController::class, 'destroy'])->name('destroy'); }); // Project Metadata (metadata sahaja — tiada kandungan) Route::get('/projects', [ProjectMetadataController::class, 'index'])->name('projects.index'); Route::post('/projects/{project}/transfer-owner', [ProjectMetadataController::class, 'transferOwner'])->name('projects.transfer-owner'); // Audit Logs Route::get('/audit-logs', [AuditLogController::class, 'index'])->name('audit-logs.index'); Route::get('/audit-logs/export', [AuditLogController::class, 'export'])->name('audit-logs.export'); }); // ============================================================ // User Routes — /dashboard & /projects // ============================================================ Route::middleware(['auth', 'active']) ->name('user.') ->group(function () { Route::get('/dashboard', [UserDashboardController::class, 'index'])->name('dashboard'); // Projects Route::prefix('projects')->name('projects.')->group(function () { Route::get('/create', [ProjectController::class, 'create'])->name('create'); Route::post('/', [ProjectController::class, 'store'])->name('store')->middleware('throttle:upload'); Route::get('/{project:uuid}', [ProjectController::class, 'show'])->name('show'); Route::delete('/{project:uuid}', [ProjectController::class, 'destroy'])->name('destroy'); // Status polling (JSON) Route::get('/{project:uuid}/status', [ProjectController::class, 'status'])->name('status'); // Retry transcription Route::post('/{project:uuid}/retry', [ProjectController::class, 'retry'])->name('retry'); // Audio stream (melalui controller — bukan direct URL) Route::get('/{project:uuid}/audio', [AudioController::class, 'stream'])->name('audio.stream'); // Transcript editor Route::patch('/{project:uuid}/transcript', [TranscriptController::class, 'update'])->name('transcript.update'); Route::post('/{project:uuid}/transcript/upload', [TranscriptController::class, 'uploadExternal'])->name('transcript.upload'); // Version history Route::get('/{project:uuid}/versions', [TranscriptVersionController::class, 'index'])->name('versions.index'); Route::post('/{project:uuid}/versions/{version}/restore', [TranscriptVersionController::class, 'restore'])->name('versions.restore'); // Comments Route::post('/{project:uuid}/comments', [CommentController::class, 'store'])->name('comments.store'); Route::delete('/{project:uuid}/comments/{comment}', [CommentController::class, 'destroy'])->name('comments.destroy'); // Collaborators Route::post('/{project:uuid}/collaborators', [CollaboratorController::class, 'store'])->name('collaborators.store'); Route::delete('/{project:uuid}/collaborators/{user}', [CollaboratorController::class, 'destroy'])->name('collaborators.destroy'); }); });