update controllers logic
This commit is contained in:
Executable → Regular
+149
-64
@@ -3,8 +3,7 @@
|
||||
|
||||
use Illuminate\Support\Facades\Route;
|
||||
use App\Http\Controllers\Api\Auth\AuthController;
|
||||
use App\Http\Controllers\DocsController;
|
||||
use App\Http\Controllers\Api\UserController;
|
||||
use App\Http\Controllers\Api\Users\UserController;
|
||||
use App\Http\Controllers\Api\Administrator\AdministratorEnrollmentController;
|
||||
use App\Http\Controllers\Api\Administrator\AdministratorAbsenceController;
|
||||
use App\Http\Controllers\Api\Administrator\AdministratorDashboardController;
|
||||
@@ -14,7 +13,6 @@ use App\Http\Controllers\Api\Administrator\EmergencyContactController as Adminis
|
||||
use App\Http\Controllers\Api\Administrator\TeacherClassAssignmentController;
|
||||
use App\Http\Controllers\Api\Badges\BadgeController;
|
||||
use App\Http\Controllers\Api\Students\StudentController;
|
||||
use App\Http\Controllers\Api\Attendance\AttendanceController;
|
||||
use App\Http\Controllers\Api\Students\StudentController as StudentApiController;
|
||||
use App\Http\Controllers\Api\Finance\InvoiceController;
|
||||
use App\Http\Controllers\Api\Assignment\AssignmentApiController;
|
||||
@@ -77,15 +75,15 @@ use App\Http\Controllers\Api\Finance\PaymentEventChargesController;
|
||||
use App\Http\Controllers\Api\Finance\PaymentManualController;
|
||||
use App\Http\Controllers\Api\Finance\PaypalPaymentController;
|
||||
use App\Http\Controllers\Api\Auth\RegisterController;
|
||||
use App\Http\Controllers\Api\RolePermissionController;
|
||||
use App\Http\Controllers\Api\RoleSwitcherController;
|
||||
use App\Http\Controllers\Api\Auth\RolePermissionController;
|
||||
use App\Http\Controllers\Api\Auth\RoleSwitcherController;
|
||||
use App\Http\Controllers\Api\Settings\SchoolCalendarController;
|
||||
use App\Http\Controllers\Api\Scores\ScorePredictorController;
|
||||
use App\Http\Controllers\Api\Reports\SlipPrinterController;
|
||||
use App\Http\Controllers\Api\Inventory\SupplierController;
|
||||
use App\Http\Controllers\Api\Inventory\SupplyCategoryController;
|
||||
use App\Http\Controllers\Api\Staff\TeacherController;
|
||||
use App\Http\Controllers\Api\StatsController;
|
||||
use App\Http\Controllers\Api\System\StatsController;
|
||||
use App\Http\Controllers\Api\Ui\UiController;
|
||||
use App\Http\Controllers\Api\Support\ContactController as SupportContactController;
|
||||
use App\Http\Controllers\Api\Support\SupportController as ApiSupportController;
|
||||
@@ -113,8 +111,77 @@ use App\Http\Controllers\Api\Attendance\AdminAttendanceApiController;
|
||||
use App\Http\Controllers\Api\Attendance\AttendanceCommentTemplateController;
|
||||
use App\Http\Controllers\Api\Attendance\TeacherAttendanceApiController;
|
||||
use App\Http\Controllers\Api\Attendance\StaffAttendanceApiController;
|
||||
use App\Http\Controllers\Api\Utilities\ProofreadController;
|
||||
use App\Http\Controllers\Api\PrintRequests\PrintRequestsController;
|
||||
use App\Http\Controllers\Api\BadgeScan\BadgeScanController;
|
||||
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\Staff\TimeOffNotificationController;
|
||||
use App\Http\Controllers\Api\System\AccessDeniedController;
|
||||
// CodeIgniter also registers POST /api/login and POST /api/register (public, no /v1).
|
||||
Route::post('login', [AuthController::class, 'login']);
|
||||
Route::post('register', [RegisterController::class, 'store']);
|
||||
|
||||
/*
|
||||
| CodeIgniter POST /api/proofread (LanguageTool proxy; session or Bearer like CI auth filter).
|
||||
*/
|
||||
Route::post('proofread', [ProofreadController::class, 'check'])->middleware('teacher.portal.auth');
|
||||
|
||||
Route::get('documentation/swagger.json', [DocsCatalogController::class, 'swaggerMergedJson'])
|
||||
->name('docs.swagger-json');
|
||||
|
||||
Route::prefix('documentation')->group(function () {
|
||||
Route::get('/', [DocsCatalogController::class, 'index'])->name('docs.index');
|
||||
Route::get('/swagger', [DocsCatalogController::class, 'swagger'])->name('docs.swagger.catalog');
|
||||
});
|
||||
|
||||
Route::middleware('auth.docs')->group(function () {
|
||||
Route::get('docs', [ApiDocsAdminController::class, 'index'])->name('api-docs.index');
|
||||
});
|
||||
|
||||
Route::get('docs/public', [ApiDocsAdminController::class, 'public'])->name('api-docs.public');
|
||||
|
||||
Route::get('access_denied', [AccessDeniedController::class, 'accessDenied'])->name('access_denied');
|
||||
|
||||
Route::get('timeoff/notify/{token}', [TimeOffNotificationController::class, 'notify'])
|
||||
->where('token', '[^/]+')
|
||||
->name('api.timeoff.notify');
|
||||
|
||||
Route::prefix('winners/competitions')->group(function () {
|
||||
Route::get('/', [PublicWinnersController::class, 'competitionIndex']);
|
||||
Route::get('{id}', [PublicWinnersController::class, 'competitionShow'])->whereNumber('id');
|
||||
});
|
||||
|
||||
Route::get('confirm_authorized_user', [AuthorizedUserInviteController::class, 'confirm'])
|
||||
->name('api.invite.confirm');
|
||||
Route::get('set_authorized_user_password/{authorizedUserId}', [AuthorizedUserInviteController::class, 'setPasswordForm'])
|
||||
->whereNumber('authorizedUserId')
|
||||
->name('api.invite.set-password-form');
|
||||
Route::post('set_authorized_user_password/{authorizedUserId}', [AuthorizedUserInviteController::class, 'savePassword'])
|
||||
->whereNumber('authorizedUserId')
|
||||
->name('api.invite.set-password');
|
||||
|
||||
/*
|
||||
| Legacy paths without /v1: POST cannot use 301 reliably; alias to same handlers as v1 (auth:api).
|
||||
| GET uses 301 to canonical /api/v1/...
|
||||
*/
|
||||
Route::middleware('auth:api')->prefix('attendance-templates')->group(function () {
|
||||
Route::post('save', [AttendanceCommentTemplateController::class, 'legacySave']);
|
||||
Route::post('delete', [AttendanceCommentTemplateController::class, 'legacyDelete']);
|
||||
});
|
||||
|
||||
Route::permanentRedirect('attendance-templates', '/api/v1/attendance-templates');
|
||||
Route::permanentRedirect('attendance-comment-templates', '/api/v1/attendance-comment-templates');
|
||||
Route::permanentRedirect('attendance-comment-templates/list-data', '/api/v1/attendance-comment-templates/list-data');
|
||||
Route::permanentRedirect('administrator/attendance-templates', '/api/v1/administrator/attendance-templates');
|
||||
|
||||
Route::prefix('v1')->group(function () {
|
||||
// Parity with CodeIgniter: POST /api/v1/login and POST /api/v1/register (public, no /auth prefix)
|
||||
Route::post('login', [AuthController::class, 'login']);
|
||||
Route::post('register', [RegisterController::class, 'store']);
|
||||
|
||||
Route::prefix('auth')->group(function () {
|
||||
Route::get('register/captcha', [RegisterController::class, 'captcha']);
|
||||
Route::post('register', [RegisterController::class, 'store']);
|
||||
@@ -138,6 +205,12 @@ Route::prefix('v1')->group(function () {
|
||||
|
||||
Route::post('contact', [SupportContactController::class, 'send']);
|
||||
|
||||
/*
|
||||
| Badge scan kiosk (public, throttled). Logs: authenticated staff (legacy CI RFIDController).
|
||||
*/
|
||||
Route::post('badge_scan/scan', [BadgeScanController::class, 'scan'])
|
||||
->middleware('throttle:120,1');
|
||||
|
||||
Route::prefix('frontend')->group(function () {
|
||||
Route::get('/', [FrontendController::class, 'index']);
|
||||
Route::get('facility', [FrontendController::class, 'facility']);
|
||||
@@ -168,6 +241,8 @@ Route::prefix('v1')->group(function () {
|
||||
Route::post('reorder', [NavBuilderController::class, 'reorder']);
|
||||
});
|
||||
|
||||
Route::middleware(['auth:api', 'badge_scan.logs'])->get('badge_scan/logs', [BadgeScanController::class, 'logs']);
|
||||
|
||||
Route::middleware('auth:api')->prefix('landing')->group(function () {
|
||||
Route::get('/', [LandingPageController::class, 'index']);
|
||||
Route::get('teacher', [LandingPageController::class, 'teacher']);
|
||||
@@ -178,11 +253,35 @@ Route::prefix('v1')->group(function () {
|
||||
Route::get('guest', [LandingPageController::class, 'guest']);
|
||||
});
|
||||
|
||||
/*
|
||||
| Print requests (CodeIgniter PrintRequests — teacher/admin JSON + uploads).
|
||||
*/
|
||||
Route::middleware('auth:api')->prefix('print-requests')->group(function () {
|
||||
Route::middleware('print_requests.teacher')->group(function () {
|
||||
Route::get('teacher', [PrintRequestsController::class, 'teacher']);
|
||||
Route::post('/', [PrintRequestsController::class, 'store']);
|
||||
Route::patch('{id}', [PrintRequestsController::class, 'teacherUpdate'])->whereNumber('id');
|
||||
Route::delete('{id}', [PrintRequestsController::class, 'destroy'])->whereNumber('id');
|
||||
Route::post('hand-copy', [PrintRequestsController::class, 'handCopy']);
|
||||
Route::post('{id}/copy', [PrintRequestsController::class, 'copy'])->whereNumber('id');
|
||||
});
|
||||
|
||||
Route::middleware('print_requests.admin')->group(function () {
|
||||
Route::get('admin', [PrintRequestsController::class, 'admin']);
|
||||
Route::patch('{id}/status', [PrintRequestsController::class, 'adminStatus'])->whereNumber('id');
|
||||
});
|
||||
|
||||
Route::get('{id}/file', [PrintRequestsController::class, 'download'])->whereNumber('id');
|
||||
});
|
||||
|
||||
Route::middleware('auth:api')->prefix('info-icon')->group(function () {
|
||||
Route::get('profile', [InfoIconController::class, 'profileIcon']);
|
||||
});
|
||||
|
||||
Route::middleware('auth:api')->prefix('administrator')->group(function () {
|
||||
Route::get('attendance-templates', [AttendanceCommentTemplateController::class, 'bootstrapUrls'])
|
||||
->name('api.v1.administrator.attendance-templates.bootstrap');
|
||||
|
||||
Route::get('absence', [AdministratorAbsenceController::class, 'index']);
|
||||
Route::post('absence', [AdministratorAbsenceController::class, 'store']);
|
||||
|
||||
@@ -237,7 +336,7 @@ Route::prefix('v1')->group(function () {
|
||||
});
|
||||
});
|
||||
|
||||
Route::prefix('attendance-tracking')->group(function () {
|
||||
Route::middleware('auth:api')->prefix('attendance-tracking')->group(function () {
|
||||
Route::get('/pending-violations', [AttendanceTrackingController::class, 'pendingViolations']);
|
||||
Route::get('/notified-violations', [AttendanceTrackingController::class, 'notifiedViolations']);
|
||||
Route::get('/student-case/{studentId}', [AttendanceTrackingController::class, 'studentCase']);
|
||||
@@ -249,7 +348,26 @@ Route::prefix('v1')->group(function () {
|
||||
Route::post('/save-notification-note', [AttendanceTrackingController::class, 'saveNotificationNote']);
|
||||
});
|
||||
|
||||
Route::prefix('assignments')->group(function () {
|
||||
Route::middleware('auth:api')->prefix('attendance-comment-templates')->group(function () {
|
||||
Route::get('/', [AttendanceCommentTemplateController::class, 'index'])->name('api.v1.attendance-comment-templates.index');
|
||||
Route::get('list-data', [AttendanceCommentTemplateController::class, 'listData'])
|
||||
->name('api.v1.attendance-comment-templates.list-data');
|
||||
Route::get('{id}', [AttendanceCommentTemplateController::class, 'show']);
|
||||
Route::post('/', [AttendanceCommentTemplateController::class, 'store']);
|
||||
Route::put('{id}', [AttendanceCommentTemplateController::class, 'update']);
|
||||
Route::delete('{id}', [AttendanceCommentTemplateController::class, 'destroy']);
|
||||
});
|
||||
|
||||
/*
|
||||
| CodeIgniter View\AttendanceCommentTemplateController — legacy list/save/delete (auth:api).
|
||||
*/
|
||||
Route::middleware('auth:api')->prefix('attendance-templates')->group(function () {
|
||||
Route::get('/', [AttendanceCommentTemplateController::class, 'listData'])->name('api.v1.attendance-templates.legacy');
|
||||
Route::post('save', [AttendanceCommentTemplateController::class, 'legacySave']);
|
||||
Route::post('delete', [AttendanceCommentTemplateController::class, 'legacyDelete']);
|
||||
});
|
||||
|
||||
Route::middleware('auth:api')->prefix('assignments')->group(function () {
|
||||
Route::get('/', [AssignmentApiController::class, 'index']);
|
||||
Route::post('/', [AssignmentApiController::class, 'store']);
|
||||
Route::get('/class-assignment-data', [AssignmentApiController::class, 'classAssignmentData']);
|
||||
@@ -416,10 +534,11 @@ Route::prefix('v1')->group(function () {
|
||||
Route::get('{studentId}/emergency-contacts', [StudentApiController::class, 'emergencyContacts']);
|
||||
Route::post('{studentId}/emergency-contacts', [StudentApiController::class, 'addEmergencyContact']);
|
||||
Route::patch('{studentId}/emergency-contacts/{contactId}', [StudentApiController::class, 'updateEmergencyContact']);
|
||||
Route::post('{studentId}/rfid', [StudentApiController::class, 'updateRfid']);
|
||||
Route::post('{studentId}/badge_scan', [StudentApiController::class, 'updateBadgeScan']);
|
||||
Route::post('{studentId}/photo', [StudentApiController::class, 'uploadPhoto']);
|
||||
Route::get('{studentId}/photo', [StudentApiController::class, 'photo']);
|
||||
Route::get('{studentId}/report-card', [ReportCardsController::class, 'studentReport']);
|
||||
Route::get('{studentId}/report-card', [ReportCardsController::class, 'studentReport'])
|
||||
->name('api.v1.students.report-card');
|
||||
Route::get('{studentId}/score-card', [StudentApiController::class, 'scoreCard']);
|
||||
});
|
||||
|
||||
@@ -444,6 +563,12 @@ Route::prefix('v1')->group(function () {
|
||||
Route::get('attendance-reports', [ParentAttendanceReportApiController::class, 'list']);
|
||||
Route::post('attendance-reports/check-existing', [ParentAttendanceReportApiController::class, 'checkExisting']);
|
||||
Route::patch('attendance-reports/{reportId}', [ParentAttendanceReportApiController::class, 'update']);
|
||||
|
||||
Route::get('authorized-users', [AuthorizedUsersController::class, 'index']);
|
||||
Route::get('authorized-users/{id}', [AuthorizedUsersController::class, 'show'])->whereNumber('id');
|
||||
Route::post('authorized-users', [AuthorizedUsersController::class, 'store']);
|
||||
Route::patch('authorized-users/{id}', [AuthorizedUsersController::class, 'update'])->whereNumber('id');
|
||||
Route::delete('authorized-users/{id}', [AuthorizedUsersController::class, 'destroy'])->whereNumber('id');
|
||||
});
|
||||
|
||||
Route::prefix('users')->group(function () {
|
||||
@@ -587,7 +712,8 @@ Route::prefix('v1')->group(function () {
|
||||
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::get('batches/admin-files/{name}/{mode?}', [ReimbursementController::class, 'serveAdminCheckFile'])
|
||||
->name('api.v1.finance.reimbursements.admin-file');
|
||||
Route::post('batches/email', [ReimbursementController::class, 'sendBatchEmail']);
|
||||
Route::get('export', [ReimbursementController::class, 'export']);
|
||||
Route::get('batches/export', [ReimbursementController::class, 'exportBatch']);
|
||||
@@ -656,17 +782,20 @@ Route::prefix('v1')->group(function () {
|
||||
Route::prefix('paypal')->group(function () {
|
||||
Route::get('redirect', [PaypalPaymentController::class, 'redirect']);
|
||||
Route::post('payments/{paymentId}/create', [PaypalPaymentController::class, 'create']);
|
||||
Route::post('execute', [PaypalPaymentController::class, 'execute']);
|
||||
Route::get('cancel', [PaypalPaymentController::class, 'cancel']);
|
||||
Route::post('execute', [PaypalPaymentController::class, 'execute'])->name('api.v1.finance.paypal.execute');
|
||||
Route::get('cancel', [PaypalPaymentController::class, 'cancel'])->name('api.v1.finance.paypal.cancel');
|
||||
});
|
||||
});
|
||||
|
||||
Route::prefix('files')->group(function () {
|
||||
Route::get('receipts/{name}', [FilesController::class, 'receipt']);
|
||||
Route::get('reimbursements/{name}', [FilesController::class, 'reimb']);
|
||||
Route::get('early-dismissal/{name}', [FilesController::class, 'earlyDismissalSignature']);
|
||||
Route::get('exams/teacher/{name}', [FilesController::class, 'examDraftTeacher']);
|
||||
Route::get('exams/final/{name}', [FilesController::class, 'examDraftFinal']);
|
||||
Route::get('receipts/{name}', [FilesController::class, 'receipt'])->name('api.v1.files.receipt');
|
||||
Route::get('reimbursements/{name}', [FilesController::class, 'reimb'])->name('api.v1.files.reimbursement');
|
||||
Route::get('early-dismissal/{name}', [FilesController::class, 'earlyDismissalSignature'])
|
||||
->name('api.v1.files.early-dismissal');
|
||||
Route::get('exams/teacher/{name}', [FilesController::class, 'examDraftTeacher'])
|
||||
->name('api.v1.files.exam-draft-teacher');
|
||||
Route::get('exams/final/{name}', [FilesController::class, 'examDraftFinal'])
|
||||
->name('api.v1.files.exam-draft-final');
|
||||
});
|
||||
|
||||
Route::prefix('reports/slips')->group(function () {
|
||||
@@ -839,11 +968,12 @@ Route::prefix('v1')->group(function () {
|
||||
Route::get('meta', [ClassProgressController::class, 'meta']);
|
||||
Route::get('/', [ClassProgressController::class, 'index']);
|
||||
Route::post('/', [ClassProgressController::class, 'store']);
|
||||
Route::get('attachments/{attachment}', [ClassProgressController::class, 'downloadAttachment'])
|
||||
->name('api.v1.class-progress.attachment');
|
||||
Route::get('{class_progress}', [ClassProgressController::class, 'show']);
|
||||
Route::patch('{class_progress}', [ClassProgressController::class, 'update']);
|
||||
Route::delete('{class_progress}', [ClassProgressController::class, 'destroy']);
|
||||
Route::get('{class_progress}/attachment', [ClassProgressController::class, 'downloadLegacyAttachment']);
|
||||
Route::get('attachments/{attachment}', [ClassProgressController::class, 'downloadAttachment']);
|
||||
});
|
||||
|
||||
Route::prefix('badges')->group(function () {
|
||||
@@ -854,48 +984,3 @@ Route::prefix('v1')->group(function () {
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
Route::prefix('attendance-comment-templates')->group(function () {
|
||||
Route::get('/', [AttendanceCommentTemplateController::class, 'index']);
|
||||
Route::get('list-data', [AttendanceCommentTemplateController::class, 'listData']);
|
||||
Route::get('{id}', [AttendanceCommentTemplateController::class, 'show']);
|
||||
Route::post('/', [AttendanceCommentTemplateController::class, 'store']);
|
||||
Route::put('{id}', [AttendanceCommentTemplateController::class, 'update']);
|
||||
Route::delete('{id}', [AttendanceCommentTemplateController::class, 'destroy']);
|
||||
});
|
||||
|
||||
Route::prefix('attendance-tracking')->group(function () {
|
||||
Route::get('pending-violations', [AttendanceTrackingController::class, 'pendingViolations']);
|
||||
Route::get('notified-violations', [AttendanceTrackingController::class, 'notifiedViolations']);
|
||||
Route::get('student-case/{studentId}', [AttendanceTrackingController::class, 'studentCase']);
|
||||
Route::post('record', [AttendanceTrackingController::class, 'record']);
|
||||
Route::post('send-auto-emails', [AttendanceTrackingController::class, 'sendAutoEmails']);
|
||||
Route::get('compose', [AttendanceTrackingController::class, 'compose']);
|
||||
Route::post('send-manual-email', [AttendanceTrackingController::class, 'sendManualEmail']);
|
||||
Route::get('parents-info', [AttendanceTrackingController::class, 'parentsInfo']);
|
||||
Route::post('save-notification-note', [AttendanceTrackingController::class, 'saveNotificationNote']);
|
||||
});
|
||||
|
||||
Route::middleware('auth:api')->group(function () {
|
||||
Route::prefix('assignments')->group(function () {
|
||||
Route::get('/', [AssignmentApiController::class, 'index']);
|
||||
Route::post('/', [AssignmentApiController::class, 'store']);
|
||||
Route::get('class-assignment-data', [AssignmentApiController::class, 'classAssignmentData']);
|
||||
});
|
||||
|
||||
Route::prefix('badges')->group(function () {
|
||||
Route::get('form-data', [BadgeController::class, 'formData']);
|
||||
Route::post('pdf', [BadgeController::class, 'generatePdf']);
|
||||
Route::get('print-status', [BadgeController::class, 'printStatus']);
|
||||
Route::post('log-print', [BadgeController::class, 'logPrint']);
|
||||
});
|
||||
|
||||
Route::prefix('class-prep')->group(function () {
|
||||
Route::get('/', [ClassPreparationController::class, 'index']);
|
||||
Route::post('mark-printed', [ClassPreparationController::class, 'markPrinted']);
|
||||
Route::post('adjustments', [ClassPreparationController::class, 'saveAdjustments']);
|
||||
Route::post('print/{classSectionId}/{schoolYear}', [ClassPreparationController::class, 'print']);
|
||||
Route::get('sticker-counts', [ClassPreparationController::class, 'stickerCounts']);
|
||||
Route::get('classes/{classSectionId}/students', [ClassPreparationController::class, 'studentsByClass']);
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user