Files
alrahma_sunday_school_api/routes/api.php
T
2026-03-05 12:29:37 -05:00

632 lines
37 KiB
PHP
Executable File

<?php
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\Api\Auth\AuthController;
use App\Http\Controllers\Api\UserController;
use App\Http\Controllers\Api\AdministratorController;
use App\Http\Controllers\Api\StudentController;
use App\Http\Controllers\Api\AttendanceController;
use App\Http\Controllers\Api\InvoiceController;
use App\Http\Controllers\Api\AssignmentController;
use App\Http\Controllers\Api\AuthorizedUsersController;
use App\Http\Controllers\Api\AttendanceTrackingController;
use App\Http\Controllers\Api\BroadcastEmailController;
use App\Http\Controllers\Api\CommunicationController;
use App\Http\Controllers\Api\ConfigurationController;
use App\Http\Controllers\Api\ContactController;
use App\Http\Controllers\Api\ClassPreparationController;
use App\Http\Controllers\Api\EmailController;
use App\Http\Controllers\Api\EmailExtractorController;
use App\Http\Controllers\Api\EmergencyContactController;
use App\Http\Controllers\Api\EventController;
use App\Http\Controllers\Api\ExtraChargesController;
use App\Http\Controllers\Api\FamilyAdminController;
use App\Http\Controllers\Api\FamilyController;
use App\Http\Controllers\Api\FilesController;
use App\Http\Controllers\Api\FinalController;
use App\Http\Controllers\Api\FinancialController;
use App\Http\Controllers\Api\FlagController;
use App\Http\Controllers\Api\GradingController;
use App\Http\Controllers\Api\HealthController;
use App\Http\Controllers\Api\HomeworkController;
use App\Http\Controllers\Api\HomeworkTrackingController;
use App\Http\Controllers\Api\InfoIconController;
use App\Http\Controllers\Api\InventoryController;
use App\Http\Controllers\Api\IpBanController;
use App\Http\Controllers\Api\LandingPageController;
use App\Http\Controllers\Api\LateSlipLogsController;
use App\Http\Controllers\Api\MessagesController;
use App\Http\Controllers\Api\MidtermController;
use App\Http\Controllers\Api\NavBuilderController;
use App\Http\Controllers\Api\NotificationManagementController;
use App\Http\Controllers\Api\PageController;
use App\Http\Controllers\Api\ParticipationController;
use App\Http\Controllers\Api\PolicyController;
use App\Http\Controllers\Api\PrintablesReportsController;
use App\Http\Controllers\Api\ProjectController;
use App\Http\Controllers\Api\QuizController;
use App\Http\Controllers\Api\PaymentController;
use App\Http\Controllers\Api\PaymentNotificationController;
use App\Http\Controllers\Api\PaymentTransactionController;
use App\Http\Controllers\Api\PaypalTransactionsController;
use App\Http\Controllers\Api\PurchaseOrderController;
use App\Http\Controllers\Api\RegisterController;
use App\Http\Controllers\Api\RolePermissionController;
use App\Http\Controllers\Api\RoleSwitcherController;
use App\Http\Controllers\Api\SchoolCalendarController;
use App\Http\Controllers\Api\ScoreCommentController;
use App\Http\Controllers\Api\ScoreController;
use App\Http\Controllers\Api\ScorePredictorController;
use App\Http\Controllers\Api\SessionTimeoutController;
use App\Http\Controllers\Api\SlipPrinterController;
use App\Http\Controllers\Api\StaffController;
use App\Http\Controllers\Api\SupplierController;
use App\Http\Controllers\Api\TeacherController;
use App\Http\Controllers\Api\UiController;
use App\Http\Controllers\Api\WhatsappController;
Route::prefix('v1')->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']);
});
});
});