diff --git a/app/Http/Controllers/AdminAuthController.php b/app/Http/Controllers/AdminAuthController.php new file mode 100644 index 0000000..8461cf2 --- /dev/null +++ b/app/Http/Controllers/AdminAuthController.php @@ -0,0 +1,65 @@ +validate([ + 'username' => 'required', + 'password' => 'required', + ]); + + $admin = DB::table('adminlogins')->where('username', $request->username)->first(); + + if ($admin && Hash::check($request->password, $admin->password)) { + + session([ + 'admin_id' => $admin->id, + 'admin_username' => $admin->username + ]); + + return response()->json([ + 'success' => true, + 'message' => 'Login Successful!', + 'redirect_url' => url('admin/adminmycourese') + ]); + } + + return response()->json([ + 'success' => false, + 'message' => 'Wrong Username or Password!' + ], 401); +} + +public function logout(Request $request) +{ + // 1. Session එකෙන් Admin දත්ත ඉවත් කර Session එක Invalidate කිරීම + $request->session()->forget(['admin_id', 'admin_username']); + $request->session()->invalidate(); + $request->session()->regenerateToken(); + + // 2. Request එක AJAX / JSON එකක් නම් JSON Response එකක් යැවීම + if ($request->ajax() || $request->wantsJson()) { + return response()->json([ + 'success' => true, + 'redirect_url' => route('admin.login') + ]); + } + + // 3. Normal Form submit එකක් නම් කෙලින්ම Login page එකට Redirect කිරීම + return redirect()->route('admin.login')->with('success', 'Logged out successfully!'); +} +} \ No newline at end of file diff --git a/app/Http/Controllers/AdminDashboardController.php b/app/Http/Controllers/AdminDashboardController.php new file mode 100644 index 0000000..961c557 --- /dev/null +++ b/app/Http/Controllers/AdminDashboardController.php @@ -0,0 +1,43 @@ +has('admin_id')) { + return redirect()->route('admin.login')->with('error', 'Please login first.'); + } + + + $totalTimetableSlots = Timetable::count(); + + $unreadNotifications = Notification::where('target_role', 'admin') + ->where('is_read', false) + ->count(); + + $notifications = Notification::where('target_role', 'admin') + ->orderBy('created_at', 'desc') + ->take(5) + ->get(); + + return view('admin.admindashboard', compact( + 'totalTimetableSlots', + 'unreadNotifications', + 'notifications' + )); + } + + public function markAsRead($id) + { + $notification = Notification::findOrFail($id); + $notification->update(['is_read' => true]); + + return redirect()->back()->with('success', 'Notification marked as read!'); + } +} \ No newline at end of file diff --git a/app/Http/Controllers/AdminProfileController.php b/app/Http/Controllers/AdminProfileController.php new file mode 100644 index 0000000..070be99 --- /dev/null +++ b/app/Http/Controllers/AdminProfileController.php @@ -0,0 +1,60 @@ +validate([ + 'username' => 'required|string|max:255|unique:adminlogins,username,' . $admin->id, + ]); + + $admin->update([ + 'username' => $request->username, + ]); + + return redirect()->back()->with('success', 'Username updated successfully!'); + } + + // Change Password + public function updatePassword(Request $request) + { + $request->validate([ + 'current_password' => 'required', + 'new_password' => 'required|min:6|confirmed', + ]); + + $adminId = session('admin_id'); + $admin = AdminLogin::findOrFail($adminId); + + // Verify current password + if (!Hash::check($request->current_password, $admin->password)) { + return redirect()->back()->withErrors(['current_password' => 'Current password does not match our records.']); + } + + // Update to new password + $admin->update([ + 'password' => Hash::make($request->new_password) + ]); + + return redirect()->back()->with('success', 'Password updated successfully!'); + } +} \ No newline at end of file diff --git a/app/Http/Controllers/AdminResultsController.php b/app/Http/Controllers/AdminResultsController.php new file mode 100644 index 0000000..e1d4357 --- /dev/null +++ b/app/Http/Controllers/AdminResultsController.php @@ -0,0 +1,60 @@ +get(); + return view('admin.adminresults', compact('results')); + } + + public function store(Request $request) + { + $validated = $request->validate([ + 'student_log_id' => 'required|string|max:255', + 'module_code' => 'required|string|max:255', + 'module_name' => 'required|string|max:255', + 'academic_year' => 'required|string|max:255', + 'semester' => 'required|string|max:255', + 'marks' => 'required|numeric|min:0|max:100', + 'grade' => 'required|string|max:10', + 'status' => 'required|in:Pass,Fail', + ]); + + Result::create($validated); + + return redirect()->route('admin.results')->with('success', 'Exam result added successfully.'); + } + + public function update(Request $request, $id) + { + $validated = $request->validate([ + 'student_log_id' => 'required|string|max:255', + 'module_code' => 'required|string|max:255', + 'module_name' => 'required|string|max:255', + 'academic_year' => 'required|string|max:255', + 'semester' => 'required|string|max:255', + 'marks' => 'required|numeric|min:0|max:100', + 'grade' => 'required|string|max:10', + 'status' => 'required|in:Pass,Fail', + ]); + + $result = Result::findOrFail($id); + $result->update($validated); + + return redirect()->route('admin.results')->with('success', 'Exam result updated successfully.'); + } + + public function destroy($id) + { + $result = Result::findOrFail($id); + $result->delete(); + + return redirect()->route('admin.results')->with('success', 'Exam result deleted successfully.'); + } +} \ No newline at end of file diff --git a/app/Http/Controllers/AdminTimetableController.php b/app/Http/Controllers/AdminTimetableController.php new file mode 100644 index 0000000..3a687e4 --- /dev/null +++ b/app/Http/Controllers/AdminTimetableController.php @@ -0,0 +1,76 @@ +has('admin_id')) { + return redirect()->route('admin.login')->with('error', 'Please login first.'); + } + + // DB එකේ තියෙන ඔක්කොම Timetable entries ගන්නවා + $allTimetables = Timetable::all(); + + // ඊට පස්සේ Time Slot එකයි Day එකයි අනුව Map කරගන්නවා + $grid = []; + foreach ($allTimetables as $item) { + $grid[$item->time_slot][$item->day] = $item; + } + + $days = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday']; + + $timeSlots = [ + '08:30 - 10:00', + '10:45 - 12:15', + '12:15 - 01:00', // Lunch / Interval + '01:00 - 03:00' + ]; + + // Today's Day Name + $today = Carbon::now()->format('l'); + $todaySchedule = Timetable::where('day', $today)->get(); + + return view('admin.admintimetable', compact('allTimetables', 'days', 'timeSlots', 'grid', 'todaySchedule', 'today')); + } + + // Save or Update Entry + public function store(Request $request) + { + $request->validate([ + 'time_slot' => 'required|string', + 'day' => 'required|string', + 'subject_name' => 'required|string|max:255', + 'type' => 'required|string', + ]); + + // අදාළ Day එකටයි Time Slot එකටයි කලින් Data තිබුණොත් Update කරනවා, නැත්නම් අලුතෙන් Add කරනවා + Timetable::updateOrCreate( + [ + 'day' => $request->day, + 'time_slot' => $request->time_slot, + ], + [ + 'subject_name' => $request->subject_name, + 'type' => $request->type, + 'student_log_id' => $request->student_log_id, + ] + ); + + return redirect()->back()->with('success', 'Timetable updated successfully!'); + } + + // Delete Single Slot + public function destroy($id) + { + $timetable = Timetable::findOrFail($id); + $timetable->delete(); + + return redirect()->back()->with('success', 'Timetable slot cleared successfully!'); + } +} \ No newline at end of file diff --git a/app/Http/Controllers/adminmycoursesController.php b/app/Http/Controllers/adminmycoursesController.php new file mode 100644 index 0000000..b5d2c0a --- /dev/null +++ b/app/Http/Controllers/adminmycoursesController.php @@ -0,0 +1,119 @@ +has('admin_id')) { + return redirect('/adminlogin')->with('error', 'Please login first!'); + } + + $courses = DB::table('courses')->orderBy('id', 'desc')->get(); + return view('admin.adminmycourses', compact('courses')); + } + + // 2. අලුත් Course එකක් එකතු කිරීම (Create) + public function store(Request $request) + { + $request->validate([ + 'title' => 'required|string|max:255', + 'course_code' => 'required|string|max:50', + 'image' => 'nullable|image|mimes:jpeg,png,jpg,gif,webp|max:2048', + 'duration' => 'required|string', + 'level' => 'required|string', + 'author' => 'nullable|string', + 'desc' => 'nullable|string', + 'status' => 'required|string', + ]); + + $imagePath = null; + if ($request->hasFile('image')) { + $imagePath = $request->file('image')->store('courses', 'public'); + } + + DB::table('courses')->insert([ + 'title' => $request->title, + 'course_code' => $request->course_code, + 'image' => $imagePath, + 'duration' => $request->duration, + 'level' => $request->level, + 'author' => $request->author ?? 'Admin', + 'desc' => $request->desc, + 'student' => $request->student ?? 0, + 'rating' => $request->rating ?? 0.0, + 'badge' => $request->badge, + 'trending' => $request->has('trending') ? 1 : 0, + 'status' => $request->status, + 'created_at' => now(), + 'updated_at' => now(), + ]); + + return redirect()->back()->with('success', 'Course added successfully!'); + } + + // 3. Course එක Update කිරීම (Update) + public function update(Request $request, $id) + { + $request->validate([ + 'title' => 'required|string|max:255', + 'course_code' => 'required|string|max:50', + 'image' => 'nullable|image|mimes:jpeg,png,jpg,gif,webp|max:2048', + 'duration' => 'required|string', + 'level' => 'required|string', + 'status' => 'required|string', + ]); + + $course = DB::table('courses')->where('id', $id)->first(); + + if (!$course) { + return redirect()->back()->with('error', 'Course not found!'); + } + + $imagePath = $course->image; + if ($request->hasFile('image')) { + if ($course->image && Storage::disk('public')->exists($course->image)) { + Storage::disk('public')->delete($course->image); + } + $imagePath = $request->file('image')->store('courses', 'public'); + } + + DB::table('courses')->where('id', $id)->update([ + 'title' => $request->title, + 'course_code' => $request->course_code, + 'image' => $imagePath, + 'duration' => $request->duration, + 'level' => $request->level, + 'author' => $request->author, + 'desc' => $request->desc, + 'badge' => $request->badge, + 'trending' => $request->has('trending') ? 1 : 0, + 'status' => $request->status, + 'updated_at' => now(), + ]); + + return redirect()->back()->with('success', 'Course updated successfully!'); + } + + // 4. Course එක Delete කිරීම (Delete) + public function destroy($id) + { + $course = DB::table('courses')->where('id', $id)->first(); + + if ($course) { + if ($course->image && Storage::disk('public')->exists($course->image)) { + Storage::disk('public')->delete($course->image); + } + DB::table('courses')->where('id', $id)->delete(); + return redirect()->back()->with('success', 'Course deleted successfully!'); + } + + return redirect()->back()->with('error', 'Course not found!'); + } +} \ No newline at end of file diff --git a/app/Models/Notification.php b/app/Models/Notification.php new file mode 100644 index 0000000..213b241 --- /dev/null +++ b/app/Models/Notification.php @@ -0,0 +1,20 @@ +id(); + $table->string('username')->unique(); + $table->string('password'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('adminlogins'); + } +}; diff --git a/database/migrations/2026_08_06_102854_create_notifications_table.php b/database/migrations/2026_08_06_102854_create_notifications_table.php new file mode 100644 index 0000000..a1ac8a1 --- /dev/null +++ b/database/migrations/2026_08_06_102854_create_notifications_table.php @@ -0,0 +1,33 @@ +id(); + $table->string('title'); + $table->text('message'); + $table->string('type')->default('info'); + $table->string('link')->nullable(); + $table->boolean('is_read')->default(false); + $table->string('target_role')->default('admin'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('notifications'); + } +}; diff --git a/resources/views/admin/admindashboard.blade.php b/resources/views/admin/admindashboard.blade.php new file mode 100644 index 0000000..40aa857 --- /dev/null +++ b/resources/views/admin/admindashboard.blade.php @@ -0,0 +1,233 @@ +@extends('layouts.adminnav') + +@section('title', 'Admin Dashboard') + +@section('content') + + +
+ + +
+
+

Welcome to Admin Dashboard

+

Automobile Engineering Academy System Overview

+
+
+ System Active +
+
+ + + @if(session('success')) + + @endif + + +
+ +
+
+
+
+ My Courses +

Manage

+
+
+ +
+
+ +
+
+ + +
+
+
+
+ Active Slots +

{{ $totalTimetableSlots ?? 0 }}

+
+
+ +
+
+ +
+
+ + +
+
+
+
+ Results +

Publish

+
+
+ +
+
+ +
+
+ + +
+
+
+
+ Notifications +

{{ $unreadNotifications ?? 0 }} New

+
+
+ +
+
+ +
+
+
+ + +
+ + + + + +
+
+
+
+ System Notifications +
+ {{ $unreadNotifications ?? 0 }} Unread +
+
+
    + @forelse($notifications ?? [] as $notification) +
  • +
    +
    +
    {{ $notification->title }}
    +

    {{ $notification->message }}

    + + {{ $notification->created_at->diffForHumans() }} + +
    + @if(!$notification->is_read) +
    + @csrf + +
    + @endif +
    +
  • + @empty +
  • + + No notifications found. +
  • + @endforelse +
+
+
+
+ +
+
+@endsection \ No newline at end of file diff --git a/resources/views/admin/adminmycourses.blade.php b/resources/views/admin/adminmycourses.blade.php new file mode 100644 index 0000000..716ac78 --- /dev/null +++ b/resources/views/admin/adminmycourses.blade.php @@ -0,0 +1,517 @@ + + + + + + + Course Management - Admin Portal + + + + + + + + + + +
+ +
Admin Panel
+ Sign In +
+ + + + + + + +
+
+

Course Management

+ +
+ + + @if(session('success')) + + @endif + + @if(session('error')) + + @endif + + +
+
+
+ + + + + + + + + + + + + + + @forelse($courses as $course) + + + + + + + + + + + + + + @empty + + + + @endforelse + +
#ImageCodeTitleDurationLevelStatusActions
{{ $loop->iteration }} + @if($course->image) + Course Image + @else + No Image + @endif + {{ $course->course_code }}{{ $course->title }}{{ $course->duration }}{{ $course->level }} + @if($course->status == 'Active') + Active + @else + Inactive + @endif + + + + + +
+ @csrf + @method('DELETE') + +
+
No courses found. Click "Add New Course" to create one.
+
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/resources/views/admin/adminprofile.blade.php b/resources/views/admin/adminprofile.blade.php new file mode 100644 index 0000000..b4e1dda --- /dev/null +++ b/resources/views/admin/adminprofile.blade.php @@ -0,0 +1,126 @@ +@extends('layouts.adminnav') + +@section('title', 'Admin Profile - Admin Panel') + +@section('content') +
+
+
+

+ Admin Profile Management +

+
+
+ + + @if(session('success')) + + @endif + + @if($errors->any()) + + @endif + +
+ +
+
+
+
+
+ +
+
+

{{ $admin->username ?? 'Administrator' }}

+ System Administrator + +
+ +
+

Admin ID: {{ $admin->id ?? session('admin_id') }}

+

Username: {{ $admin->username ?? 'N/A' }}

+

Created At: {{ isset($admin->created_at) ? $admin->created_at->format('Y-m-d') : 'N/A' }}

+
+
+
+
+ + +
+ +
+
+
+ Update Account Details +
+
+
+
+ @csrf + @method('PUT') + +
+
+ + +
+
+ +
+
+
+
+
+ + +
+
+
+ Change Password +
+
+
+
+ @csrf + @method('PUT') + +
+
+ + +
+
+ + +
+
+ + +
+
+ +
+
+
+
+
+
+
+
+@endsection \ No newline at end of file diff --git a/resources/views/admin/adminresults.blade.php b/resources/views/admin/adminresults.blade.php new file mode 100644 index 0000000..a17ba7a --- /dev/null +++ b/resources/views/admin/adminresults.blade.php @@ -0,0 +1,221 @@ +@extends('layouts.adminnav') + +@section('title', 'Exam Results Management - Admin Panel') + +@section('content') +
+
+

+ Exam Results Management +

+ +
+ + @if(session('success')) + + @endif + + @if($errors->any()) + + @endif + + +
+
+
+ + + + + + + + + + + + + + + + + @forelse($results as $result) + + + + + + + + + + + + + + + + @empty + + + + @endforelse + +
IDStudent Log IDModule CodeModule NameAcademic YearSemesterMarksGradeStatusActions
{{ $result->id }}{{ $result->student_log_id }}{{ $result->module_code }}{{ $result->module_name }}{{ $result->academic_year }}{{ $result->semester }}{{ $result->marks }} + {{ $result->grade }} + + @if(strtolower($result->status) == 'pass') + Pass + @else + Fail + @endif + + + + + +
+ @csrf + @method('DELETE') + +
+
No examination results found.
+
+
+
+
+ + + +@endsection \ No newline at end of file diff --git a/resources/views/admin/admintimetable.blade.php b/resources/views/admin/admintimetable.blade.php new file mode 100644 index 0000000..9801dbf --- /dev/null +++ b/resources/views/admin/admintimetable.blade.php @@ -0,0 +1,260 @@ +@extends('layouts.adminnav') + +@section('title', 'Admin Timetable Management') + +@section('content') + + +
+ + +
+
+

My Class Timetable

+

Automobile Engineering Academy Timetable Management

+
+
+ + + @if(session('success')) + + @endif + +
+ +
+
+
+
+ Today's Schedule ({{ $today }}) +
+
+
+ @forelse($todaySchedule as $item) +
+
+ {{ $item->type }} +
{{ $item->subject_name }}
+
+ {{ $item->time_slot }} +
+ @empty +

No classes scheduled for today.

+ @endforelse +
+
+
+ + +
+
+
+
+ Timetable Legend +
+
+
+
+ Theory + Practical + Workshop + Exam +
+
+

+ How to Edit: Click on any timetable slot in the table below to edit or add subject details. +

+
+
+
+
+ + +
+
+
+ + + + + @foreach($days as $day) + + @endforeach + + + + @foreach($timeSlots as $slot) + + + + + @if($slot == '12:15 - 01:00') + + + @else + + @foreach($days as $day) + @php + $item = $grid[$slot][$day] ?? null; + @endphp + + @endforeach + @endif + + @endforeach + +
Time + {{ $day }} {{ strtolower($today) == strtolower($day) ? '(Today)' : '' }} +
{{ $slot }} + ☕ Interval / Lunch Break + +
+ + @if($item) + + {{ $item->type }} + +
{{ $item->subject_name }}
+ @else + Add + @endif + +
+
+
+
+
+
+ + + + + +@endsection \ No newline at end of file diff --git a/resources/views/adminlogin.blade.php b/resources/views/adminlogin.blade.php new file mode 100644 index 0000000..1892927 --- /dev/null +++ b/resources/views/adminlogin.blade.php @@ -0,0 +1,143 @@ + + + + + + + Admin Login - AutoEdu + + + + + + + + +
+
+ +
Admin Login
+
+ +
+ + + +
+
+ +
+ + +
+
+ +
+ +
+ + +
+
+ + +
+
+
+ + + + + \ No newline at end of file diff --git a/resources/views/layouts/adminnav.blade.php b/resources/views/layouts/adminnav.blade.php new file mode 100644 index 0000000..1ae0fd8 --- /dev/null +++ b/resources/views/layouts/adminnav.blade.php @@ -0,0 +1,368 @@ + + + + + + + @yield('title', 'Admin Portal - Automobile Academic') + + + + + + + + + + +
+ +
+ Admin Panel +
+ +
+ @if(session()->has('admin_id')) + + @else + Sign In + @endif +
+
+ + + + + + +
+ @yield('content') +
+ + + + + + \ No newline at end of file diff --git a/routes/web.php b/routes/web.php index 4ea67fe..d860f92 100644 --- a/routes/web.php +++ b/routes/web.php @@ -12,8 +12,12 @@ use App\Http\Controllers\ApplyController; use App\Http\Controllers\ResultsController; use App\Http\Controllers\TimetableController; use App\Http\Controllers\CoureseAssignController; - - +use App\Http\Controllers\AdminAuthController; +use App\Http\Controllers\adminmycoursesController; +use App\Http\Controllers\AdminResultsController; +use App\Http\Controllers\AdminProfileController; +use App\Http\Controllers\AdminTimetableController; +use App\Http\Controllers\AdminDashboardController; /* |-------------------------------------------------------------------------- @@ -21,7 +25,6 @@ use App\Http\Controllers\CoureseAssignController; |-------------------------------------------------------------------------- */ -// Home Page Route::get('/', function () { return view('welcome'); }); @@ -31,7 +34,6 @@ Route::view('/students', 'students')->name('students'); Route::view('/abouts', 'abouts')->name('abouts'); Route::view('/contact', 'contacts')->name('contact'); -// Guest Authentication View Routes Route::view('/signin', 'signin')->name('signin'); Route::view('/signup', 'signup')->name('signup'); @@ -43,12 +45,11 @@ Route::view('/signup', 'signup')->name('signup'); Route::post('/signuppage', [AuthController::class, 'register']); Route::post('/signin', [AuthController::class, 'login']); Route::post('/custom-logout', [AuthController::class, 'logout']); - Route::post('/contact-submit', [ContactMsgController::class, 'store'])->name('contact.store'); /* |-------------------------------------------------------------------------- -| Password Reset Routes (For Guest Users) +| Password Reset Routes |-------------------------------------------------------------------------- */ Route::middleware('guest')->group(function () { @@ -60,7 +61,7 @@ Route::middleware('guest')->group(function () { /* |-------------------------------------------------------------------------- -| Regular Auth Protected Routes (Laravel Default Auth) +| Regular Auth Protected Routes |-------------------------------------------------------------------------- */ Route::middleware(['auth'])->group(function () { @@ -72,18 +73,13 @@ Route::middleware(['auth'])->group(function () { /* |-------------------------------------------------------------------------- -| STUDENT PORTAL ROUTES (Session-Based Auth) +| STUDENT PORTAL ROUTES |-------------------------------------------------------------------------- */ - -// Student Login & Logout Action Routes Route::post('/student-login', [StudentPortalController::class, 'studentlogin'])->name('student.login.submit'); Route::post('/studentlogout', [StudentPortalController::class, 'studentlogout'])->name('student.logout'); -// Student Portal Section (Protected by Student Session Check) Route::middleware(['web'])->group(function () { - - Route::get('/student-portal', function () { if (!session()->has('student_id') && !session()->has('student_log_id')) { return redirect('/signin')->with('error', 'Please login first!'); @@ -91,41 +87,76 @@ Route::middleware(['web'])->group(function () { return view('StudentPortal'); })->name('student.portal'); - Route::get('/StudentProfile', [StudentPortalController::class, 'showProfile'])->name('StudentProfile'); - - Route::get('/results', [ResultsController::class, 'index'])->name('results'); - Route::get('/Dashboard', function () { - if (!session()->has('student_id') && !session()->has('student_log_id')) { return redirect('/signin')->with('error', 'Please login first!'); } + if (!session()->has('student_id') && !session()->has('student_log_id')) { + return redirect('/signin')->with('error', 'Please login first!'); + } return view('StudentPortal'); })->name('Dashboard'); - Route::get('/mycourse', function () { - if (!session()->has('student_id') && !session()->has('student_log_id')) { return redirect('/signin')->with('error', 'Please login first!'); } - return view('mycourse'); - })->name('mycourse'); - - // 2. Dynamic Timetable Controller Route එක මෙතැනට යෙදුවා Route::get('/timetable', [TimetableController::class, 'index'])->name('timetable'); Route::get('/Assignments', function () { - if (!session()->has('student_id') && !session()->has('student_log_id')) { return redirect('/signin')->with('error', 'Please login first!'); } + if (!session()->has('student_id') && !session()->has('student_log_id')) { + return redirect('/signin')->with('error', 'Please login first!'); + } return view('Assignments'); })->name('Assignments'); Route::get('/Studentguidelines', function () { - if (!session()->has('student_id') && !session()->has('student_log_id')) { return redirect('/signin')->with('error', 'Please login first!'); } + if (!session()->has('student_id') && !session()->has('student_log_id')) { + return redirect('/signin')->with('error', 'Please login first!'); + } return view('Studentguidelines'); })->name('Studentguidelines'); Route::get('/Feedback&Complain', [FeedbackController::class, 'index'])->name('feedback.index'); Route::post('/Feedback&Complain/store', [FeedbackController::class, 'store'])->name('feedback.store'); - Route::get('/mycourse', [CoureseAssignController::class, 'showMyCourse'])->name('mycourse'); + Route::get('/module/{id}', [CoureseAssignController::class, 'showModule'])->name('module.show'); +}); + +/* +|-------------------------------------------------------------------------- +| ADMIN PORTAL ROUTES +|-------------------------------------------------------------------------- +*/ + +Route::get('/admin/login', [AdminAuthController::class, 'showLoginForm'])->name('admin.login'); +Route::post('/admin/login', [AdminAuthController::class, 'login']); +Route::post('/admin/logout', [AdminAuthController::class, 'logout'])->name('admin.logout'); + +Route::middleware(['web'])->prefix('admin')->group(function () { + + // Admin Dashboard Routes + Route::get('/dashboard', [AdminDashboardController::class, 'index'])->name('admin.admindashboard'); + Route::post('/notifications/read/{id}', [AdminDashboardController::class, 'markAsRead'])->name('admin.notifications.read'); + + // Admin Courses + Route::get('/adminmycourses', [adminmycoursesController::class, 'index'])->name('admin.mycourses'); + Route::post('/adminmycourses/store', [adminmycoursesController::class, 'store'])->name('admin.courses.store'); + Route::post('/adminmycourses/update/{id}', [adminmycoursesController::class, 'update'])->name('admin.courses.update'); + Route::delete('/adminmycourses/delete/{id}', [adminmycoursesController::class, 'destroy'])->name('admin.courses.delete'); + + // Admin Timetable Routes + Route::get('/timetable', [AdminTimetableController::class, 'index'])->name('admin.timetable'); + Route::post('/timetable/store', [AdminTimetableController::class, 'store'])->name('admin.timetable.store'); + Route::put('/timetable/update/{id}', [AdminTimetableController::class, 'update'])->name('admin.timetable.update'); + Route::delete('/timetable/delete/{id}', [AdminTimetableController::class, 'destroy'])->name('admin.timetable.delete'); + + // Admin Results + Route::get('/results', [AdminResultsController::class, 'index'])->name('admin.results'); + Route::post('/results/store', [AdminResultsController::class, 'store'])->name('admin.results.store'); + Route::put('/results/update/{id}', [AdminResultsController::class, 'update'])->name('admin.results.update'); + Route::delete('/results/delete/{id}', [AdminResultsController::class, 'destroy'])->name('admin.results.delete'); + + // Admin Profile + Route::get('/profile', [AdminProfileController::class, 'index'])->name('admin.profile'); + Route::put('/profile/update', [AdminProfileController::class, 'update'])->name('admin.profile.update'); + Route::put('/profile/password', [AdminProfileController::class, 'updatePassword'])->name('admin.profile.password'); - Route::get('/module/{id}', [CoureseAssignController::class, 'showModule'])->name('module.show'); }); \ No newline at end of file