fix teacher and parent routes

This commit is contained in:
root
2026-04-24 02:12:01 -04:00
parent 5128c74892
commit 7216cb2885
36 changed files with 1575 additions and 49 deletions
+190
View File
@@ -118,6 +118,7 @@ use App\Http\Controllers\Api\Documentation\ApiDocsAdminController;
use App\Http\Controllers\Api\Documentation\DocsCatalogController;
use App\Http\Controllers\Api\Parents\AuthorizedUserInviteController;
use App\Http\Controllers\Api\Public\PublicWinnersController;
use App\Http\Controllers\Api\ScannerController;
use App\Http\Controllers\Api\Staff\TimeOffNotificationController;
use App\Http\Controllers\Api\System\AccessDeniedController;
// CodeIgniter also registers POST /api/login and POST /api/register (public, no /v1).
@@ -210,6 +211,8 @@ Route::prefix('v1')->group(function () {
*/
Route::post('badge_scan/scan', [BadgeScanController::class, 'scan'])
->middleware('throttle:120,1');
Route::post('scanner/process', [ScannerController::class, 'process'])
->middleware('throttle:120,1');
Route::prefix('frontend')->group(function () {
Route::get('/', [FrontendController::class, 'index']);
@@ -303,12 +306,108 @@ Route::prefix('v1')->group(function () {
Route::get('enrollment-withdrawal', [AdministratorEnrollmentController::class, 'index']);
Route::get('enrollment-withdrawal/new-students', [AdministratorEnrollmentController::class, 'newStudents']);
Route::post('enrollment-withdrawal/update-statuses', [AdministratorEnrollmentController::class, 'updateStatuses']);
Route::get('enroll-withdrawal', [AdministratorEnrollmentController::class, 'index']);
Route::get('enroll-withdrawal/new-students', [AdministratorEnrollmentController::class, 'newStudents']);
Route::post('enroll-withdrawal/update-statuses', [AdministratorEnrollmentController::class, 'updateStatuses']);
Route::get('emergency-contacts', [AdministratorEmergencyContactController::class, 'index']);
Route::get('emergency-contacts/data', [AdministratorEmergencyContactController::class, 'index']);
Route::get('emergency-contacts/{contactId}', [AdministratorEmergencyContactController::class, 'show']);
Route::patch('emergency-contacts/{contactId}', [AdministratorEmergencyContactController::class, 'update']);
Route::delete('emergency-contacts/{contactId}', [AdministratorEmergencyContactController::class, 'destroy']);
Route::prefix('staff')->group(function () {
Route::get('/', [StaffController::class, 'index']);
Route::get('{id}', [StaffController::class, 'show']);
Route::post('/', [StaffController::class, 'store']);
Route::patch('{id}', [StaffController::class, 'update']);
Route::delete('{id}', [StaffController::class, 'destroy']);
});
Route::prefix('flags')->group(function () {
Route::get('pending', [IncidentApiController::class, 'current']);
Route::get('form-meta', [IncidentApiController::class, 'formMeta']);
Route::get('students/{gradeId}', [IncidentApiController::class, 'studentsByGrade']);
Route::get('processed', [IncidentApiController::class, 'processed']);
Route::get('analysis', [IncidentApiController::class, 'analysis']);
Route::post('/', [IncidentApiController::class, 'store']);
Route::post('{incidentId}/state', [IncidentApiController::class, 'updateState']);
Route::post('{incidentId}/close', [IncidentApiController::class, 'close']);
Route::post('{incidentId}/cancel', [IncidentApiController::class, 'cancel']);
});
Route::prefix('grading')->group(function () {
Route::get('homework-tracking', [HomeworkTrackingController::class, 'index']);
});
Route::prefix('expenses')->group(function () {
Route::get('/', [ExpenseController::class, 'index']);
Route::get('options', [ExpenseController::class, 'options']);
Route::get('{id}', [ExpenseController::class, 'show']);
Route::post('/', [ExpenseController::class, 'store']);
Route::put('{id}', [ExpenseController::class, 'update']);
Route::post('{id}/status', [ExpenseController::class, 'updateStatus']);
});
Route::prefix('reports')->group(function () {
Route::get('financial-detailed', [FinancialController::class, 'report']);
});
Route::prefix('invoices')->group(function () {
Route::get('management', [InvoiceController::class, 'management']);
});
Route::prefix('paypal-transactions')->group(function () {
Route::get('/', [PaypalTransactionsController::class, 'index']);
Route::get('csv', [PaypalTransactionsController::class, 'downloadCsv']);
});
Route::prefix('reimbursements')->group(function () {
Route::get('under-processing', [ReimbursementController::class, 'underProcessing']);
Route::post('mark-donation', [ReimbursementController::class, 'markDonation']);
Route::post('batches', [ReimbursementController::class, 'createBatch']);
Route::post('batches/assign', [ReimbursementController::class, 'updateBatchAssignment']);
Route::post('batches/lock', [ReimbursementController::class, 'lockBatch']);
Route::post('batches/admin-files', [ReimbursementController::class, 'uploadBatchAdminFile']);
Route::get('batches/admin-files/{name}/{mode?}', [ReimbursementController::class, 'serveAdminCheckFile']);
Route::post('batches/email', [ReimbursementController::class, 'sendBatchEmail']);
Route::get('export', [ReimbursementController::class, 'export']);
Route::get('batches/export', [ReimbursementController::class, 'exportBatch']);
Route::get('reimbursed-expenses', [ReimbursementController::class, 'reimbursedExpenses']);
Route::get('/', [ReimbursementController::class, 'index']);
Route::post('/', [ReimbursementController::class, 'store']);
Route::post('process', [ReimbursementController::class, 'process']);
Route::put('{id}', [ReimbursementController::class, 'update']);
});
Route::prefix('printables')->group(function () {
Route::prefix('badges')->group(function () {
Route::get('form-options', [BadgeController::class, 'formData']);
});
Route::prefix('report-card')->group(function () {
Route::get('meta', [ReportCardsController::class, 'meta']);
});
});
Route::prefix('role-permission')->group(function () {
Route::get('roles', [RolePermissionController::class, 'roles']);
Route::post('roles', [RolePermissionController::class, 'storeRole']);
Route::get('roles/{roleId}', [RolePermissionController::class, 'showRole']);
Route::patch('roles/{roleId}', [RolePermissionController::class, 'updateRole']);
Route::delete('roles/{roleId}', [RolePermissionController::class, 'deleteRole']);
Route::get('users', [RolePermissionController::class, 'users']);
Route::post('users/{userId}/roles', [RolePermissionController::class, 'assignRoles']);
Route::get('permissions', [RolePermissionController::class, 'permissions']);
Route::post('permissions', [RolePermissionController::class, 'storePermission']);
Route::get('permissions/{permissionId}', [RolePermissionController::class, 'showPermission']);
Route::patch('permissions/{permissionId}', [RolePermissionController::class, 'updatePermission']);
Route::delete('permissions/{permissionId}', [RolePermissionController::class, 'deletePermission']);
Route::get('roles/{roleId}/permissions', [RolePermissionController::class, 'rolePermissions']);
Route::put('roles/{roleId}/permissions', [RolePermissionController::class, 'updateRolePermissions']);
});
});
Route::middleware('auth:api')->prefix('attendance')->group(function () {
@@ -374,6 +473,71 @@ Route::prefix('v1')->group(function () {
});
Route::middleware('auth:api')->group(function () {
// Legacy alias: same handler as GET /api/v1/scores/homework
Route::get('teacher/homework-list', [HomeworkScoreController::class, 'index']);
// Legacy alias: teacher add-homework page and save action
Route::get('teacher/add-homework', [HomeworkScoreController::class, 'index']);
Route::post('teacher/add-homework', [HomeworkScoreController::class, 'update']);
// Legacy alias: teacher add-quiz page and save action
Route::get('teacher/add-quiz', [QuizScoreController::class, 'index']);
Route::post('teacher/add-quiz', [QuizScoreController::class, 'update']);
// Legacy alias: teacher add quiz column
Route::get('teacher/add-quiz-column-form', [QuizScoreController::class, 'index']);
Route::post('teacher/add-quiz-column-form', [QuizScoreController::class, 'addColumn']);
// Legacy alias: teacher add-midterm-exam page and save action
Route::get('teacher/add-midterm-exam', [MidtermScoreController::class, 'index']);
Route::post('teacher/add-midterm-exam', [MidtermScoreController::class, 'update']);
// Legacy alias: teacher add-final-exam page and save action
Route::get('teacher/add-final-exam', [FinalScoreController::class, 'index']);
Route::post('teacher/add-final-exam', [FinalScoreController::class, 'update']);
// Legacy alias: teacher add-participation page and save action
Route::get('teacher/add-participation', [ParticipationScoreController::class, 'index']);
Route::post('teacher/add-participation', [ParticipationScoreController::class, 'update']);
// Legacy alias: teacher add-project page and save action
Route::get('teacher/add-project', [ProjectScoreController::class, 'index']);
Route::post('teacher/add-project', [ProjectScoreController::class, 'update']);
// Legacy alias: teacher assignment management screen
Route::get('teacher/teacher-assignment', [TeacherClassAssignmentController::class, 'index']);
// Legacy alias: teacher exam drafts
Route::get('teacher/exam-drafts', [ExamDraftApiController::class, 'teacherIndex']);
Route::post('teacher/exam-drafts', [ExamDraftApiController::class, 'teacherStore']);
Route::get('teacher/drafts', [ExamDraftApiController::class, 'teacherIndex']);
Route::post('teacher/drafts', [ExamDraftApiController::class, 'teacherStore']);
// Legacy alias: teacher inventory book distribution form/save
Route::get('teacher/inventory/books/distribute', [InventoryController::class, 'teacherDistribution']);
Route::post('teacher/inventory/books/distribute', [InventoryController::class, 'teacherDistributionStore']);
// Legacy alias: teacher print request bootstrap/context
Route::get('teacher/print-requests/context', [PrintRequestsController::class, 'teacher']);
// Legacy alias: same handler as GET /api/v1/teachers/classes (class dashboard / roster)
Route::get('teacher/class-view', [TeacherController::class, 'classes']);
Route::get('teacher/no-classes', [TeacherController::class, 'classes']);
Route::get('teacher/select-semester', function () {
return response()->json([
'ok' => true,
'school_year' => \App\Models\Configuration::getConfig('school_year'),
'semester' => \App\Models\Configuration::getConfig('semester'),
'semester_options' => ['Fall', 'Spring'],
]);
});
Route::get('teacher/absence-vacation', [TeacherController::class, 'absenceForm']);
Route::post('teacher/absence-vacation', [TeacherController::class, 'submitAbsence']);
// Legacy CI paths: same handler as GET /api/v1/attendance/teacher/form
Route::get('teacher/showupdate-attendance', [TeacherAttendanceApiController::class, 'form']);
Route::get('teacher/showupdate_attendance', [TeacherAttendanceApiController::class, 'form']);
// Legacy alias: same handler as GET /api/v1/scores/overview (teacher score dashboard)
Route::get('teacher/scores', [ScoreDashboardController::class, 'overview']);
// Legacy alias: school calendar events with audience=teacher
Route::get('teacher/calendar', [SchoolCalendarController::class, 'teacherCalendarLegacy']);
// Legacy teacher progress submit page: GET loads form metadata, POST saves reports
Route::post('teacher/class-progress-submit', [ClassProgressController::class, 'store']);
Route::get('teacher/class-progress-submit', [ClassProgressController::class, 'legacySubmitForm']);
// Legacy teacher progress history page
Route::get('teacher/class-progress-history', [ClassProgressController::class, 'index']);
// Legacy teacher progress view page
Route::get('teacher/class-progress-view', [ClassProgressController::class, 'index']);
// Legacy alias: same handler as GET /api/v1/competition-scores
Route::get('teacher/competition-scores', [CompetitionScoresController::class, 'index']);
Route::get('dashboard/route', [DashboardController::class, 'route']);
Route::get('emergency-contacts', [AdministratorEmergencyContactController::class, 'index']);
@@ -466,6 +630,26 @@ Route::prefix('v1')->group(function () {
Route::get('roles/{roleId}/permissions', [RolePermissionController::class, 'rolePermissions']);
Route::put('roles/{roleId}/permissions', [RolePermissionController::class, 'updateRolePermissions']);
});
Route::prefix('role-permission')->group(function () {
Route::get('roles', [RolePermissionController::class, 'roles']);
Route::post('roles', [RolePermissionController::class, 'storeRole']);
Route::get('roles/{roleId}', [RolePermissionController::class, 'showRole']);
Route::patch('roles/{roleId}', [RolePermissionController::class, 'updateRole']);
Route::delete('roles/{roleId}', [RolePermissionController::class, 'deleteRole']);
Route::get('users', [RolePermissionController::class, 'users']);
Route::post('users/{userId}/roles', [RolePermissionController::class, 'assignRoles']);
Route::get('permissions', [RolePermissionController::class, 'permissions']);
Route::post('permissions', [RolePermissionController::class, 'storePermission']);
Route::get('permissions/{permissionId}', [RolePermissionController::class, 'showPermission']);
Route::patch('permissions/{permissionId}', [RolePermissionController::class, 'updatePermission']);
Route::delete('permissions/{permissionId}', [RolePermissionController::class, 'deletePermission']);
Route::get('roles/{roleId}/permissions', [RolePermissionController::class, 'rolePermissions']);
Route::put('roles/{roleId}/permissions', [RolePermissionController::class, 'updateRolePermissions']);
});
Route::prefix('role-switcher')->group(function () {
Route::get('/', [RoleSwitcherController::class, 'index']);
Route::post('switch', [RoleSwitcherController::class, 'switch']);
@@ -512,6 +696,7 @@ Route::prefix('v1')->group(function () {
Route::prefix('students')->group(function () {
Route::get('/', [StudentApiController::class, 'index']);
Route::post('/', [StudentApiController::class, 'store']);
Route::get('score-card/selectable', [StudentApiController::class, 'scoreCardSelectable']);
Route::get('assignments', [StudentApiController::class, 'assignments']);
Route::post('assign-class', [StudentApiController::class, 'assignClass']);
Route::post('remove-class', [StudentApiController::class, 'removeClass']);
@@ -579,6 +764,10 @@ Route::prefix('v1')->group(function () {
Route::delete('{userId}', [UserController::class, 'destroy']);
});
Route::prefix('administrator')->group(function () {
Route::get('login-activity', [UserController::class, 'loginActivity']);
});
Route::prefix('broadcast-email')->group(function () {
Route::get('options', [BroadcastEmailController::class, 'options']);
Route::post('send', [BroadcastEmailController::class, 'send']);
@@ -665,6 +854,7 @@ Route::prefix('v1')->group(function () {
});
Route::prefix('discounts')->group(function () {
Route::get('/', [DiscountController::class, 'options']);
Route::get('options', [DiscountController::class, 'options']);
Route::post('apply', [DiscountController::class, 'apply']);
Route::get('vouchers', [DiscountController::class, 'listVouchers']);