group(function () { Route::post('auth/login', [AuthController::class, 'login']); Route::post('user/profile-auth', [UserController::class, 'profileAuth']); Route::post('users/password/forgot', [UserController::class, 'requestPasswordReset']); Route::get('users/password/reset/{token}', [UserController::class, 'validateResetToken']); Route::post('users/password/reset', [UserController::class, 'completePasswordReset']); Route::get('user/confirm/{token}', [UserController::class, 'confirm']); Route::post('user/set-password', [UserController::class, 'setPassword']); Route::post('authorized-users/confirm', [AuthorizedUsersController::class, 'confirm']); Route::get('authorized-users/{id}/set-password', [AuthorizedUsersController::class, 'setPassword']); Route::post('authorized-users/{id}/password', [AuthorizedUsersController::class, 'savePassword']); Route::post('contact', [ContactController::class, 'submit']); // Public registration endpoints Route::prefix('register')->group(function () { Route::get('/', [RegisterController::class, 'index']); Route::post('/', [RegisterController::class, 'register']); Route::get('success', [RegisterController::class, 'registrationSuccess']); }); // Public page endpoints Route::prefix('pages')->group(function () { Route::get('privacy', [PageController::class, 'privacyPolicy']); Route::get('terms', [PageController::class, 'termsOfService']); Route::get('help', [PageController::class, 'helpCenter']); Route::post('contact', [PageController::class, 'submitContact']); }); // Public policy endpoints Route::prefix('policy')->group(function () { Route::get('/', [PolicyController::class, 'index']); Route::get('picture', [PolicyController::class, 'schoolPicturePolicy']); Route::get('school', [PolicyController::class, 'schoolPolicy']); }); // Health check endpoint (public) Route::get('health', [HealthController::class, 'index']); // Session timeout configuration (public) Route::get('session/timeout-config', [SessionTimeoutController::class, 'getTimeoutConfig']); // File serving endpoints (public, but with security checks) Route::get('files/receipt/{name}', [FilesController::class, 'receipt']); Route::get('files/reimb/{name}', [FilesController::class, 'reimb']); Route::get('files/reimbursement/{name}', [FilesController::class, 'reimbursement']); // Alias for backward compatibility Route::get('/docs', '\App\Http\Controllers\DocsController@index'); Route::middleware('auth:api')->group(function () { Route::get('auth/me', [AuthController::class, 'me']); Route::post('auth/logout', [AuthController::class, 'logout']); // Session timeout management Route::get('session/checkTimeout', [SessionTimeoutController::class, 'checkTimeout']); Route::post('session/pingActivity', [SessionTimeoutController::class, 'pingActivity']); Route::get('user/profile', [UserController::class, 'profile']); Route::patch('user/profile', [UserController::class, 'updateProfile']); Route::get('info-icon/profile', [InfoIconController::class, 'profileIcon']); Route::get('landing', [LandingPageController::class, 'index']); Route::get('landing/data', [LandingPageController::class, 'getData']); Route::get('users', [UserController::class, 'index']); Route::get('users/with-roles', [UserController::class, 'listWithRoles']); Route::post('users', [UserController::class, 'store']); Route::patch('users/{id}', [UserController::class, 'updateUser']); Route::delete('users/{id}', [UserController::class, 'destroy']); Route::get('users/login-activity', [UserController::class, 'loginActivity']); Route::post('users/select-role', [UserController::class, 'selectRole']); Route::delete('users/roles/{roleId}', [UserController::class, 'deleteRole']); Route::get('students', [StudentController::class, 'index']); Route::get('students/{id}', [StudentController::class, 'show']); Route::post('students/assign-class', [StudentController::class, 'assignClassStudent']); Route::post('students/auto-distribute', [StudentController::class, 'autoDistributeSections']); Route::get('students/promotion-totals', [StudentController::class, 'promotionTotalsApi']); Route::get('administrator/enrollment/new-students', [AdministratorController::class, 'newStudents']); Route::get('assignments/class-sections', [AssignmentController::class, 'classAssignments']); Route::get('assignments/class-sections/data', [AssignmentController::class, 'classAssignmentData']); Route::post('assignments/class-sections', [AssignmentController::class, 'saveClassAssignment']); Route::get('attendance', [AttendanceController::class, 'index']); Route::post('attendance', [AttendanceController::class, 'store']); Route::get('attendance/teacher/grid', [AttendanceController::class, 'teacherSectionGrid']); Route::get('attendance/teacher/update-data', [AttendanceController::class, 'teacherUpdateData']); Route::get('broadcast-email', [BroadcastEmailController::class, 'metadata']); Route::post('broadcast-email/send', [BroadcastEmailController::class, 'send']); Route::post('broadcast-email/upload-image', [BroadcastEmailController::class, 'uploadImage']); Route::get('authorized-users', [AuthorizedUsersController::class, 'index']); Route::get('authorized-users/{id}', [AuthorizedUsersController::class, 'show']); Route::post('authorized-users', [AuthorizedUsersController::class, 'store']); Route::patch('authorized-users/{id}', [AuthorizedUsersController::class, 'update']); Route::delete('authorized-users/{id}', [AuthorizedUsersController::class, 'destroy']); Route::prefix('attendance-tracking')->group(function () { Route::get('pending', [AttendanceTrackingController::class, 'pendingViolations']); Route::get('notified', [AttendanceTrackingController::class, 'notifiedViolations']); Route::post('notify', [AttendanceTrackingController::class, 'recordNotification']); Route::post('send-auto-emails', [AttendanceTrackingController::class, 'sendAutoEmails']); Route::get('compose', [AttendanceTrackingController::class, 'composeEmail']); Route::post('send-email', [AttendanceTrackingController::class, 'sendEmailManual']); Route::get('parents-info', [AttendanceTrackingController::class, 'parentsInfo']); Route::post('notes', [AttendanceTrackingController::class, 'saveNotificationNote']); }); Route::prefix('class-prep')->group(function () { Route::get('list', [ClassPreparationController::class, 'index']); Route::post('adjustments', [ClassPreparationController::class, 'saveAdjustment']); Route::post('mark-printed', [ClassPreparationController::class, 'markPrinted']); }); Route::prefix('email')->group(function () { Route::post('send', [EmailController::class, 'send']); }); Route::prefix('email-extractor')->group(function () { Route::get('emails', [EmailExtractorController::class, 'getEmails']); Route::post('compare', [EmailExtractorController::class, 'compare']); }); Route::prefix('emergency-contacts')->group(function () { Route::get('/', [EmergencyContactController::class, 'index']); Route::get('data', [EmergencyContactController::class, 'data']); Route::get('{id}', [EmergencyContactController::class, 'show']); Route::get('parent/{id}', [EmergencyContactController::class, 'getByParent']); Route::post('/', [EmergencyContactController::class, 'create']); Route::patch('{id}', [EmergencyContactController::class, 'update']); Route::delete('{id}', [EmergencyContactController::class, 'delete']); }); Route::prefix('events')->group(function () { Route::get('/', [EventController::class, 'index']); Route::get('{id}', [EventController::class, 'show']); Route::post('/', [EventController::class, 'create']); Route::patch('{id}', [EventController::class, 'update']); Route::delete('{id}', [EventController::class, 'delete']); Route::get('charges', [EventController::class, 'charges']); Route::post('charges/update', [EventController::class, 'updateCharges']); Route::get('students-with-charges', [EventController::class, 'getStudentsWithCharges']); }); Route::prefix('communications')->group(function () { Route::get('/', [CommunicationController::class, 'index']); Route::post('/', [CommunicationController::class, 'send']); Route::get('conversation', [CommunicationController::class, 'conversation']); Route::delete('{id}', [CommunicationController::class, 'delete']); Route::get('metadata', [CommunicationController::class, 'metadata']); Route::get('students/{student_id}/families', [CommunicationController::class, 'families']); Route::get('families/{family_id}/guardians', [CommunicationController::class, 'guardians']); Route::post('preview', [CommunicationController::class, 'preview']); Route::post('send-email', [CommunicationController::class, 'sendEmail']); }); Route::prefix('configuration')->group(function () { Route::get('/', [ConfigurationController::class, 'index']); Route::post('/', [ConfigurationController::class, 'create']); Route::get('key/{config_key}', [ConfigurationController::class, 'getByKey']); Route::get('list', [ConfigurationController::class, 'listData']); Route::get('{id}', [ConfigurationController::class, 'show']); Route::patch('{id}', [ConfigurationController::class, 'update']); Route::delete('{id}', [ConfigurationController::class, 'delete']); }); Route::prefix('invoices')->group(function () { Route::get('/', [InvoiceController::class, 'index']); Route::get('management-data', [InvoiceController::class, 'managementData']); Route::get('unpaid', [InvoiceController::class, 'unpaidInvoices']); Route::get('parent/{parentId}', [InvoiceController::class, 'getByParent']); Route::post('generate', [InvoiceController::class, 'generateInvoice']); Route::post('check-and-generate', [InvoiceController::class, 'checkAndGenerateInvoice']); Route::post('/', [InvoiceController::class, 'store']); Route::get('{id}', [InvoiceController::class, 'show']); Route::get('{id}/pdf', [InvoiceController::class, 'generatePdfInvoice']); Route::patch('{id}', [InvoiceController::class, 'update']); Route::patch('{id}/status', [InvoiceController::class, 'updateStatus']); Route::delete('{id}', [InvoiceController::class, 'delete']); }); Route::prefix('payments')->group(function () { Route::get('/', [PaymentController::class, 'index']); Route::post('/', [PaymentController::class, 'store']); Route::get('parent/{id}', [PaymentController::class, 'getByParent']); Route::get('enrolled-students/{parentId}', [PaymentController::class, 'getEnrolledStudents']); Route::get('manual-pay-search', [PaymentController::class, 'manualPaySearch']); Route::post('manual-pay-update', [PaymentController::class, 'manualPayUpdate']); Route::post('manual-pay-edit', [PaymentController::class, 'manualPayEdit']); Route::get('event-charges', [PaymentController::class, 'eventChargesShow']); Route::post('event-charges', [PaymentController::class, 'eventChargesUpdate']); Route::get('redirect-page', [PaymentController::class, 'redirectPage']); Route::get('check-file/{filename}', [PaymentController::class, 'serveCheckFile']); Route::get('check-file/{filename}/inline', function ($filename) { return app(PaymentController::class)->serveCheckFile($filename, 'inline'); }); Route::post('{id}/update-balance', [PaymentController::class, 'updateBalance']); Route::get('{id}', [PaymentController::class, 'show']); Route::patch('{id}', [PaymentController::class, 'update']); Route::delete('{id}', [PaymentController::class, 'destroy']); // Payment notification routes Route::prefix('notifications')->group(function () { Route::get('/', [PaymentNotificationController::class, 'index']); Route::post('send', [PaymentNotificationController::class, 'send']); }); }); Route::prefix('payment-transactions')->group(function () { Route::get('/', [PaymentTransactionController::class, 'index']); Route::post('/', [PaymentTransactionController::class, 'store']); Route::get('payment/{paymentId}', [PaymentTransactionController::class, 'getByPayment']); Route::get('{id}', [PaymentTransactionController::class, 'show']); Route::patch('{transactionId}/status', [PaymentTransactionController::class, 'updateStatus']); }); Route::prefix('paypal-transactions')->group(function () { Route::get('/', [PaypalTransactionsController::class, 'index']); Route::get('export-csv', [PaypalTransactionsController::class, 'exportCsv']); Route::get('transaction/{transactionId}', [PaypalTransactionsController::class, 'getByTransactionId']); Route::get('{id}', [PaypalTransactionsController::class, 'show']); }); Route::prefix('extra-charges')->group(function () { Route::get('/', [ExtraChargesController::class, 'index']); Route::get('{id}', [ExtraChargesController::class, 'show']); Route::post('/', [ExtraChargesController::class, 'store']); Route::patch('{id}', [ExtraChargesController::class, 'update']); Route::delete('{id}', [ExtraChargesController::class, 'delete']); Route::post('{id}/void', [ExtraChargesController::class, 'void']); Route::post('{id}/reverse', [ExtraChargesController::class, 'reverse']); Route::get('parent-options', [ExtraChargesController::class, 'parentOptions']); Route::get('invoices-for-parent', [ExtraChargesController::class, 'invoicesForParent']); }); Route::prefix('family-admin')->group(function () { Route::get('/', [FamilyAdminController::class, 'index']); Route::get('search', [FamilyAdminController::class, 'search']); Route::get('card', [FamilyAdminController::class, 'card']); }); Route::prefix('families')->group(function () { Route::get('/', [FamilyController::class, 'index']); Route::get('{id}', [FamilyController::class, 'show']); Route::get('by-student/{student_id}', [FamilyController::class, 'getByStudent']); Route::get('{id}/guardians', [FamilyController::class, 'getGuardians']); Route::get('students/{student_id}/families', [FamilyController::class, 'familiesByStudent']); Route::get('{family_id}/guardians-list', [FamilyController::class, 'guardiansByFamily']); Route::post('bootstrap', [FamilyController::class, 'bootstrap']); Route::post('attach-second-by-user', [FamilyController::class, 'attachSecondByUser']); Route::post('attach-second-by-email', [FamilyController::class, 'attachSecondByEmail']); Route::post('set-primary-home', [FamilyController::class, 'setPrimaryHome']); Route::post('set-guardian-flags', [FamilyController::class, 'setGuardianFlags']); Route::post('unlink-guardian', [FamilyController::class, 'unlinkGuardian']); Route::post('unlink-student', [FamilyController::class, 'unlinkStudent']); Route::post('import-second-parents', [FamilyController::class, 'importSecondParentsFromLegacy']); }); Route::prefix('files')->group(function () { Route::get('/', [FilesController::class, 'index']); }); Route::prefix('finals')->group(function () { Route::get('student/{id}', [FinalController::class, 'getByStudent']); Route::get('class-section/{class_section_id}', [FinalController::class, 'getByClassSection']); Route::post('/', [FinalController::class, 'create']); Route::patch('{id}', [FinalController::class, 'update']); }); Route::prefix('midterm')->group(function () { Route::get('/', [MidtermController::class, 'index']); Route::post('/', [MidtermController::class, 'update']); Route::get('management', [MidtermController::class, 'showManagement']); Route::post('management', [MidtermController::class, 'updateManagement']); }); Route::prefix('participation')->group(function () { Route::get('/', [ParticipationController::class, 'index']); Route::post('/', [ParticipationController::class, 'update']); Route::get('management', [ParticipationController::class, 'showManagement']); Route::post('management', [ParticipationController::class, 'updateManagement']); Route::get('student/{id}', [ParticipationController::class, 'getByStudent']); }); Route::prefix('projects')->group(function () { Route::get('add-project', [ProjectController::class, 'addProject']); Route::post('update-scores', [ProjectController::class, 'updateProjectScores']); Route::post('add-column', [ProjectController::class, 'addNextProjectColumn']); Route::get('management', [ProjectController::class, 'showProjectMngt']); Route::post('update', [ProjectController::class, 'updateProject']); Route::get('student/{id}', [ProjectController::class, 'getByStudent']); Route::get('/', [ProjectController::class, 'index']); Route::post('/', [ProjectController::class, 'store']); Route::get('{id}', [ProjectController::class, 'show']); Route::patch('{id}', [ProjectController::class, 'update']); }); Route::prefix('quizzes')->group(function () { Route::get('add-quiz', [QuizController::class, 'addQuiz']); Route::post('update-scores', [QuizController::class, 'updateQuizScores']); Route::post('add-column', [QuizController::class, 'addNextQuizColumn']); Route::get('management', [QuizController::class, 'showQuizMngt']); Route::post('update', [QuizController::class, 'updateQuiz']); Route::get('student/{id}', [QuizController::class, 'getByStudent']); Route::get('/', [QuizController::class, 'index']); Route::post('/', [QuizController::class, 'store']); Route::get('{id}', [QuizController::class, 'show']); Route::patch('{id}', [QuizController::class, 'update']); }); Route::prefix('printables')->group(function () { Route::get('report-card-meta', [PrintablesReportsController::class, 'reportCardMeta']); Route::get('badge-status', [PrintablesReportsController::class, 'badgePrintStatus']); Route::post('badge-status', [PrintablesReportsController::class, 'logBadgePrint']); Route::get('students-by-class/{classSectionId}', [PrintablesReportsController::class, 'getByClass']); Route::get('students-by-class/{classSectionId}/alt', [PrintablesReportsController::class, 'studentsByClass']); Route::get('preview-sticker-counts', [PrintablesReportsController::class, 'previewStickerCounts']); Route::post('badge', [PrintablesReportsController::class, 'badge']); Route::post('generate-stickers', [PrintablesReportsController::class, 'generateStickers']); Route::get('report-card/{studentId}', [PrintablesReportsController::class, 'generateSingleReport']); Route::get('report-card/class/{classSectionId}', [PrintablesReportsController::class, 'generateClassReport']); }); Route::prefix('slips')->group(function () { Route::post('print', [SlipPrinterController::class, 'print']); Route::get('preview', [SlipPrinterController::class, 'preview']); Route::post('preview', [SlipPrinterController::class, 'preview']); Route::post('reprint/{id}', [SlipPrinterController::class, 'reprint']); }); Route::prefix('staff')->group(function () { Route::get('/', [StaffController::class, 'index']); Route::post('/', [StaffController::class, 'store']); Route::get('{id}', [StaffController::class, 'show']); Route::patch('{id}', [StaffController::class, 'update']); Route::delete('{id}', [StaffController::class, 'destroy']); }); Route::prefix('teachers')->group(function () { Route::get('/', [TeacherController::class, 'index']); Route::get('class-view', [TeacherController::class, 'getClassView']); Route::get('class-assignments', [TeacherController::class, 'getTeacherClassAssignments']); Route::post('class-assignments/assign', [TeacherController::class, 'assignClassTeacher']); Route::delete('class-assignments', [TeacherController::class, 'deleteAssignment']); Route::get('absence-form', [TeacherController::class, 'getAbsenceForm']); Route::post('absence', [TeacherController::class, 'submitAbsence']); Route::get('{id}/classes', [TeacherController::class, 'getClasses']); Route::get('{id}', [TeacherController::class, 'show']); }); Route::prefix('financial')->group(function () { Route::get('report', [FinancialController::class, 'report']); Route::get('report-summary', [FinancialController::class, 'reportSummary']); Route::get('unpaid-parents', [FinancialController::class, 'unpaidParents']); Route::get('download-csv', [FinancialController::class, 'downloadCsv']); }); Route::prefix('flags')->group(function () { Route::get('/', [FlagController::class, 'index']); Route::get('students/{grade_id}', [FlagController::class, 'getStudentsByGrade']); Route::get('{id}', [FlagController::class, 'show']); Route::post('/', [FlagController::class, 'create']); Route::post('add', [FlagController::class, 'addFlag']); Route::patch('{id}/state', [FlagController::class, 'updateState']); Route::post('{id}/close', [FlagController::class, 'close']); Route::post('{id}/close-flag', [FlagController::class, 'closeFlag']); Route::post('{id}/cancel', [FlagController::class, 'cancel']); Route::post('{id}/cancel-flag', [FlagController::class, 'cancelFlag']); }); Route::prefix('grading')->group(function () { Route::get('{type}/{class_section_id?}/{student_id?}', [GradingController::class, 'show']); Route::post('/', [GradingController::class, 'update']); Route::get('/', [GradingController::class, 'grading']); Route::get('scores-comments', [GradingController::class, 'getScoreComment']); }); Route::prefix('homework')->group(function () { Route::get('/', [HomeworkController::class, 'index']); Route::get('student/{id}', [HomeworkController::class, 'getByStudent']); Route::get('class-section', [HomeworkController::class, 'getByClassSection']); Route::get('students-with-scores', [HomeworkController::class, 'getStudentsWithScores']); Route::get('tracking', [HomeworkTrackingController::class, 'index']); Route::post('/', [HomeworkController::class, 'create']); Route::post('update-scores', [HomeworkController::class, 'updateScores']); Route::post('add-column', [HomeworkController::class, 'addNextColumn']); Route::patch('{id}', [HomeworkController::class, 'update']); }); Route::prefix('inventory')->group(function () { // Items Route::get('/', [InventoryController::class, 'index']); Route::get('create', [InventoryController::class, 'create']); Route::get('{id}', [InventoryController::class, 'show']); Route::post('/', [InventoryController::class, 'store']); Route::patch('{id}', [InventoryController::class, 'update']); Route::delete('{id}', [InventoryController::class, 'delete']); // Categories Route::post('categories', [InventoryController::class, 'saveCategory']); // Classroom audit Route::get('classroom/{id}/audit', [InventoryController::class, 'auditClassroomForm']); Route::post('classroom/{id}/audit', [InventoryController::class, 'auditClassroomStore']); // Summary Route::get('summary/{type?}', [InventoryController::class, 'summary']); Route::get('summary-all', [InventoryController::class, 'summaryAll']); // Adjust Route::get('{id}/adjust', [InventoryController::class, 'adjustForm']); Route::post('{id}/adjust', [InventoryController::class, 'adjustStore']); // Book distribution Route::get('books/distribute', [InventoryController::class, 'teacherDistributeForm']); Route::post('books/distribute', [InventoryController::class, 'teacherDistributeStore']); // Movements Route::prefix('movements')->group(function () { Route::get('/', [InventoryController::class, 'movementsIndex']); Route::get('create', [InventoryController::class, 'movementsCreate']); Route::get('{id}', [InventoryController::class, 'movementsEdit']); Route::post('/', [InventoryController::class, 'movementsStore']); Route::patch('{id}', [InventoryController::class, 'movementsUpdate']); Route::delete('{id}', [InventoryController::class, 'movementsDelete']); Route::post('bulk-delete', [InventoryController::class, 'movementsBulkDelete']); }); }); Route::prefix('suppliers')->group(function () { Route::get('/', [SupplierController::class, 'index']); Route::post('/', [SupplierController::class, 'store']); Route::get('{id}', [SupplierController::class, 'show']); Route::patch('{id}', [SupplierController::class, 'update']); Route::delete('{id}', [SupplierController::class, 'destroy']); }); Route::prefix('purchase-orders')->group(function () { Route::get('/', [PurchaseOrderController::class, 'index']); Route::post('/', [PurchaseOrderController::class, 'store']); Route::get('{id}', [PurchaseOrderController::class, 'show']); Route::patch('{id}', [PurchaseOrderController::class, 'update']); Route::post('{id}/receive', [PurchaseOrderController::class, 'receive']); Route::post('{id}/cancel', [PurchaseOrderController::class, 'cancel']); }); Route::prefix('ip-bans')->group(function () { Route::get('/', [IpBanController::class, 'index']); Route::get('{id}', [IpBanController::class, 'show']); Route::post('/', [IpBanController::class, 'ban']); Route::post('ban-now', [IpBanController::class, 'banNow']); Route::post('unban', [IpBanController::class, 'unban']); }); Route::prefix('late-slip-logs')->group(function () { Route::get('/', [LateSlipLogsController::class, 'index']); Route::get('{id}', [LateSlipLogsController::class, 'show']); }); Route::prefix('messages')->group(function () { Route::get('/', [MessagesController::class, 'index']); Route::get('inbox', [MessagesController::class, 'inbox']); Route::get('sent', [MessagesController::class, 'sent']); Route::get('drafts', [MessagesController::class, 'drafts']); Route::get('trash', [MessagesController::class, 'trash']); Route::post('/', [MessagesController::class, 'send']); Route::post('receive', [MessagesController::class, 'receive']); Route::get('recipients/{type}', [MessagesController::class, 'getRecipients']); }); Route::prefix('nav-builder')->group(function () { Route::get('data', [NavBuilderController::class, 'data']); Route::post('/', [NavBuilderController::class, 'save']); Route::delete('{id}', [NavBuilderController::class, 'delete']); Route::post('reorder', [NavBuilderController::class, 'reorder']); }); Route::prefix('notifications')->group(function () { Route::get('active', [NotificationManagementController::class, 'activeNotificationsData']); Route::get('deleted', [NotificationManagementController::class, 'deletedNotificationsData']); Route::post('send', [NotificationManagementController::class, 'send']); Route::post('{id}/restore', [NotificationManagementController::class, 'restore']); }); Route::prefix('rolepermission')->group(function () { // Roles Route::get('roles', [RolePermissionController::class, 'roles']); Route::post('roles', [RolePermissionController::class, 'storeRole']); Route::get('roles/{id}', [RolePermissionController::class, 'showRole']); Route::patch('roles/{id}', [RolePermissionController::class, 'updateRole']); Route::delete('roles/{id}', [RolePermissionController::class, 'deleteRole']); // Permissions Route::get('permissions', [RolePermissionController::class, 'permissions']); Route::post('permissions', [RolePermissionController::class, 'storePermission']); Route::patch('permissions/{id}', [RolePermissionController::class, 'updatePermission']); Route::delete('permissions/{id}', [RolePermissionController::class, 'deletePermission']); // Role Permissions Route::get('roles/{roleId}/permissions', [RolePermissionController::class, 'rolePermissions']); Route::post('roles/{roleId}/permissions', [RolePermissionController::class, 'saveRolePermissions']); // User Role Assignment Route::get('users', [RolePermissionController::class, 'users']); Route::post('users/{userId}/roles', [RolePermissionController::class, 'assignRole']); Route::get('admins', [RolePermissionController::class, 'admins']); }); Route::prefix('role-switcher')->group(function () { Route::get('/', [RoleSwitcherController::class, 'index']); Route::post('switch', [RoleSwitcherController::class, 'switchRole']); Route::post('switch/{role}', [RoleSwitcherController::class, 'switchTo']); }); Route::prefix('school-calendar')->group(function () { Route::get('/', [SchoolCalendarController::class, 'index']); Route::post('/', [SchoolCalendarController::class, 'store']); Route::get('view/parent', [SchoolCalendarController::class, 'calendarParentView']); Route::get('view/teacher', [SchoolCalendarController::class, 'calendarTeacherView']); Route::get('view/admin', [SchoolCalendarController::class, 'calendarAdminView']); Route::get('{id}', [SchoolCalendarController::class, 'show']); Route::patch('{id}', [SchoolCalendarController::class, 'update']); Route::delete('{id}', [SchoolCalendarController::class, 'delete']); }); Route::prefix('score-comments')->group(function () { Route::post('/', [ScoreCommentController::class, 'save']); Route::post('update', [ScoreCommentController::class, 'updateComments']); Route::get('management', [ScoreCommentController::class, 'viewCommentsMngt']); Route::get('student/{studentId}', [ScoreCommentController::class, 'getByStudent']); Route::patch('{id}', [ScoreCommentController::class, 'update']); }); Route::prefix('scores')->group(function () { Route::get('/', [ScoreController::class, 'index']); Route::get('student/{studentId}', [ScoreController::class, 'getByStudent']); Route::get('parent-view', [ScoreController::class, 'viewStudentScore']); Route::post('update', [ScoreController::class, 'updateScores']); Route::post('update-final-exam', [ScoreController::class, 'updateFinalExamScores']); Route::post('update-midterm', [ScoreController::class, 'updateMidtermScores']); Route::post('recalculate', [ScoreController::class, 'recalculate']); }); Route::prefix('score-predictor')->group(function () { Route::get('combined-report', [ScorePredictorController::class, 'combinedReport']); }); Route::prefix('ui')->group(function () { Route::get('style', [UiController::class, 'style']); Route::post('style', [UiController::class, 'updateStyle']); }); Route::prefix('whatsapp')->group(function () { Route::get('/', [WhatsappController::class, 'index']); Route::get('links', [WhatsappController::class, 'links']); Route::post('links', [WhatsappController::class, 'saveLink']); Route::post('send-invites', [WhatsappController::class, 'sendInvites']); Route::get('parent-contacts', [WhatsappController::class, 'parentContacts']); Route::get('parent-contacts-by-class', [WhatsappController::class, 'parentContactsByClass']); Route::post('memberships', [WhatsappController::class, 'updateMembership']); }); }); });