matched(function ($event) { \Log::info('Matched route:', [ 'uri' => $event->route->uri(), 'name' => $event->route->getName(), ]); }); /*Route::get('student/{course}/{lesson}', function ($course, $lesson) { \Log::info('Executing route closure now'); return response("Matched two segments: course={$course}, lesson={$lesson}", 200); })->where('any1', '.*')->where('any2', '.*');*/ Route::middleware(['auth', 'role:admin|god']) ->prefix('admin') ->name('admin.') ->group(function () { Route::get('/users', [App\Http\Controllers\Admin\UserController::class, 'index'])->name('users.index'); Route::post('users/{user}/role', [App\Http\Controllers\Admin\UserController::class, 'updateRole'])->name('users.updateRole'); }); // Teacher-only Route::middleware(['auth', 'role:teacher']) ->prefix('teacher') ->name('teacher.') ->group(function () { Route::get('/dashboard', function () { return view('teacher.dashboard'); })->name('dashboard'); Route::post('questions/{question}/answer', [App\Http\Controllers\Student\LessonQuestionController::class, 'answer']) ->name('questions.answer'); }); // Admin-only Route::middleware(['auth','role:admin']) ->prefix('admin') ->name('admin.') ->group(function () { Route::get('/dashboard', [AdminDashboardController::class, 'index']) ->name('dashboard'); //Route::get('/students', [StudentController::class, 'index']) // ->name('students.index'); Route::get('/teachers', [TeacherController::class, 'index']) ->name('teachers.index'); Route::get('/courses', [CourseController::class, 'index']) ->name('courses.index'); Route::get('/addcourse', [CourseController::class, 'create']) ->name('courses.create'); Route::get('/addteacher', [TeacherController::class, 'create']) ->name('teachers.create'); Route::post('/addteacher', [TeacherController::class, 'store']) ->name('teachers.store'); Route::post('/addcourse', [CourseController::class, 'store']) ->name('courses.store'); Route::get('/levels', [LevelController::class, 'index']) ->name('levels.index'); Route::get('/addlevel', [LevelController::class, 'create']) ->name('levels.create'); Route::post('/addlevel', [LevelController::class, 'store']) ->name('levels.store'); Route::get('/subjects', [SubjectController::class, 'index']) ->name('subjects.index'); Route::get('/addsubject', [SubjectController::class, 'create']) ->name('subjects.create'); Route::post('/addsubject', [SubjectController::class, 'store']) ->name('subjects.store'); Route::post('/modules', [ModuleController::class, 'store']) ->name('modules.store'); Route::post('modules/reorder', [ModuleController::class, 'reorder']) ->name('modules.reorder'); Route::get('/courses/{course:slug}', [CourseController::class, 'show']) ->name('courses.show'); Route::post('/chapters', [ChapterController::class, 'store'])->name('chapters.store'); Route::delete('/chapters/{chapter}', [ChapterController::class, 'destroy'])->name('chapters.destroy'); Route::post('/chapters/reorder', [ChapterController::class, 'reorder']) ->name('chapters.reorder'); Route::get('/courses/{course:slug}/chapter/{chapter:slug}', [ChapterController::class, 'show']) ->withoutScopedBindings() ->name('chapters.show'); Route::post('/lessons/reorder', [AdminLessonController::class, 'reorder']) ->name('lessons.reorder'); Route::get('/courses/{course:slug}/chapter/{chapter:slug}/topic/{lesson:slug}', [AdminLessonController::class, 'show']) ->name('lessons.show'); Route::post('/videos/reorder', [LessonVideoController::class, 'reorder']) ->name('videos.reorder'); Route::post('/videos', [LessonVideoController::class, 'store']) ->name('videos.store'); Route::delete('/videos/{video}', [LessonVideoController::class, 'destroy']) ->name('videos.destroy'); Route::post('/chapters', [ChapterController::class, 'store']) ->name('chapters.store'); Route::delete('/chapters/{chapter}', [ChapterController::class, 'destroy']) ->name('chapters.destroy'); Route::post('/lessons', [AdminLessonController::class, 'store'])->name('lessons.store'); Route::delete('courses/{course:slug}/chapter/{chapter:slug}/lesson/{lesson:slug}', [App\Http\Controllers\Admin\LessonController::class, 'destroy'] )->name('lessons.destroy'); Route::get('/calendar', [AdminCalendarController::class, 'index']) ->name('calendar'); Route::get('/bookings/create', [AdminBookingController::class, 'create']) ->name('bookings.create'); Route::post('/bookings', [AdminBookingController::class, 'store']) ->name('bookings.store'); Route::get('/bookings/block/create', [AdminBookingController::class, 'createBlock']) ->name('bookings.block.create'); Route::post('/bookings/block', [AdminBookingController::class, 'storeBlock']) ->name('bookings.block.store'); Route::get('/bookings/series/create', [AdminBookingController::class, 'createSeries']) ->name('bookings.series.create'); Route::post('/bookings/series', [AdminBookingController::class, 'storeSeries']) ->name('bookings.series.store'); Route::get('courses/{course:slug}/section/{section:slug}', [LessonSectionController::class, 'show'] )->name('sections.show'); Route::get('sections', [LessonSectionController::class, 'index']) ->name('sections.index'); Route::post('courses/{course:slug}/sections', [LessonSectionController::class, 'store'] )->name('sections.store'); Route::put('sections/{lessonSection}', [LessonSectionController::class, 'update']) ->name('sections.update'); Route::delete( 'courses/{course:slug}/section/{section:slug}', [LessonSectionController::class, 'destroy'] )->name('sections.destroy'); Route::post('sections/reorder', [LessonSectionController::class, 'reorder']) ->name('sections.reorder'); Route::get('test-section-binding/{section:slug}', function (\App\Models\LessonSection $section) { return $section; }); Route::resource('students', StudentController::class); Route::get('/billing/check-email', [BillingController::class, 'checkEmail']) ->name('billing.check-email'); Route::resource('parents', ParentController::class)->except(['show']); }); // Student-only Route::middleware(['auth', 'role:student']) ->prefix('student') ->name('student.') ->group(function () { Route::get('/{course:slug}/{lesson:slug}', [StudentLessonController::class, 'show']) ->where([ 'course' => '[A-Za-z0-9\-]+', 'lesson' => '[A-Za-z0-9\-]+', ]) ->name('course.lesson'); Route::get('/dashboard', [StudentDashboardController::class, 'index']) ->name('dashboard'); Route::get('/lessons/{lesson:slug}', [LessonController::class, 'show']) ->name('lessons.show'); Route::get('/courses/{course}', [StudentCourseController::class, 'show']) ->name('courses.show'); Route::get('/calendar', [StudentCalendarController::class, 'index']) ->name('calendar'); Route::get('/bookings/create', [StudentBookingController::class, 'create']) ->name('bookings.create'); Route::get('/bookings/series/create', [StudentBookingController::class, 'createSeries']) ->name('bookings.series.create'); Route::post('/bookings', [StudentBookingController::class, 'store']) ->name('bookings.store'); Route::post('/bookings/series', [StudentBookingController::class, 'storeSeries']) ->name('bookings.series.store'); Route::get('/bookings', [BookingsListController::class, 'index']) ->name('bookings.index'); Route::get('/bookings/{booking}/cancel', [StudentBookingController::class, 'cancelConfirm']) ->name('bookings.cancel.confirm'); Route::post('/bookings/{booking}/cancel', [StudentBookingController::class, 'cancelStore']) ->name('bookings.cancel.store'); Route::post('questions/{course:slug}/{lesson:slug}', [App\Http\Controllers\Student\LessonQuestionController::class, 'store']) ->name('course.lesson.questions.store'); }); Route::get('/', [HomeController::class, 'index'])->name('home'); //Route::get('/', function () { // return view('welcome'); //}); Route::get('/dashboard', function () { $user = auth()->user(); // Spatie role checks: if ($user->hasRole('admin')) { return redirect()->route('admin.dashboard'); } // Support either role name you choose for tutors: if ($user->hasRole('teacher') || $user->hasRole('tutor')) { return redirect()->route('teacher.dashboard'); } // default for everyone else return redirect()->route('student.dashboard'); })->middleware('auth')->name('dashboard'); Route::middleware('auth')->group(function () { Route::get('/profile', [ProfileController::class, 'edit'])->name('profile.edit'); Route::patch('/profile', [ProfileController::class, 'update'])->name('profile.update'); Route::delete('/profile', [ProfileController::class, 'destroy'])->name('profile.destroy'); }); Route::get('/calendar/teacher/{token}.ics', [IcsFeedController::class, 'teacher']) ->name('calendar.teacher.feed') ->withoutMiddleware(['web', \App\Http\Middleware\VerifyCsrfToken::class]); Route::get('/admin/test', function () { $user = Auth::user(); if (!$user || $user->email !== 'jollinski@gmail.com') { abort(403, 'Admins only.'); } return 'Hello_admin'; })->middleware('auth'); require __DIR__.'/auth.php';