Update Saqel Platform: 2026-09-08 13:43:36
This commit is contained in:
+71
-59
@@ -64,16 +64,24 @@ $router->get('/curriculum-studio', function ($request, $response) {
|
||||
});
|
||||
|
||||
// Real Ministry Curriculum PDF Ingestion & Live Tree API
|
||||
$router->post('/api/curriculum/upload-pdf', [\App\Controllers\CurriculumController::class, 'uploadPdf']);
|
||||
$router->get('/api/curriculum/upload-status', [\App\Controllers\CurriculumController::class, 'getUploadStatus']);
|
||||
$router->get('/api/curriculum/upload-log', [\App\Controllers\CurriculumController::class, 'getUploadLog']);
|
||||
$curriculumManagerMiddleware = [\App\Middlewares\AuthMiddleware::class, \App\Middlewares\CurriculumManagerMiddleware::class];
|
||||
$teacherMiddleware = [\App\Middlewares\AuthMiddleware::class, \App\Middlewares\TeacherRoleMiddleware::class];
|
||||
$studentMiddleware = [\App\Middlewares\AuthMiddleware::class, \App\Middlewares\StudentRoleMiddleware::class];
|
||||
$guardianMiddleware = [\App\Middlewares\AuthMiddleware::class, \App\Middlewares\GuardianRoleMiddleware::class];
|
||||
$institutionalMiddleware = [\App\Middlewares\AuthMiddleware::class, \App\Middlewares\InstitutionalRoleMiddleware::class];
|
||||
$superAdminMiddleware = [\App\Middlewares\AuthMiddleware::class, \App\Middlewares\SuperAdminRoleMiddleware::class];
|
||||
$chatMiddleware = [\App\Middlewares\AuthMiddleware::class, \App\Middlewares\ChatRoleMiddleware::class];
|
||||
|
||||
$router->post('/api/curriculum/upload-pdf', [\App\Controllers\CurriculumController::class, 'uploadPdf'], $curriculumManagerMiddleware);
|
||||
$router->get('/api/curriculum/upload-status', [\App\Controllers\CurriculumController::class, 'getUploadStatus'], $curriculumManagerMiddleware);
|
||||
$router->get('/api/curriculum/upload-log', [\App\Controllers\CurriculumController::class, 'getUploadLog'], $curriculumManagerMiddleware);
|
||||
$router->get('/api/curriculum/tree', [\App\Controllers\CurriculumController::class, 'getTree']);
|
||||
$router->get('/api/curriculum/lesson', [\App\Controllers\CurriculumController::class, 'getLessonContent']);
|
||||
$router->post('/api/curriculum/save-lesson', [\App\Controllers\CurriculumController::class, 'saveLessonContent']);
|
||||
$router->post('/api/curriculum/generate-ai-assets', [\App\Controllers\CurriculumController::class, 'generateAiAssets']);
|
||||
$router->post('/api/curriculum/bake-lab', [\App\Controllers\CurriculumController::class, 'bakeInteractiveLab']);
|
||||
$router->post('/api/curriculum/generate-questions', [\App\Controllers\CurriculumController::class, 'generateQuestionBank']);
|
||||
$router->post('/api/curriculum/upload-video', [\App\Controllers\CurriculumController::class, 'uploadLessonVideo']);
|
||||
$router->post('/api/curriculum/save-lesson', [\App\Controllers\CurriculumController::class, 'saveLessonContent'], $curriculumManagerMiddleware);
|
||||
$router->post('/api/curriculum/generate-ai-assets', [\App\Controllers\CurriculumController::class, 'generateAiAssets'], $curriculumManagerMiddleware);
|
||||
$router->post('/api/curriculum/bake-lab', [\App\Controllers\CurriculumController::class, 'bakeInteractiveLab'], $curriculumManagerMiddleware);
|
||||
$router->post('/api/curriculum/generate-questions', [\App\Controllers\CurriculumController::class, 'generateQuestionBank'], $curriculumManagerMiddleware);
|
||||
$router->post('/api/curriculum/upload-video', [\App\Controllers\CurriculumController::class, 'uploadLessonVideo'], $curriculumManagerMiddleware);
|
||||
$router->get('/api/curriculum/search', function ($request, $response) {
|
||||
$q = $request->getQueryParams()['q'] ?? '';
|
||||
$response->json([
|
||||
@@ -94,8 +102,12 @@ $router->get('/api/health', function ($request, $response) {
|
||||
'time' => date('Y-m-d H:i:s')
|
||||
]);
|
||||
});
|
||||
$router->get('/api/test/nabeh', [\App\Controllers\TestController::class, 'testNabeh']);
|
||||
$router->get('/api/test/system', [\App\Controllers\TestController::class, 'testSystem']);
|
||||
$router->get('/api/test/nabeh', [\App\Controllers\TestController::class, 'testNabeh'], $superAdminMiddleware);
|
||||
$router->get('/api/test/system', [\App\Controllers\TestController::class, 'testSystem'], $superAdminMiddleware);
|
||||
$router->get('/api/super-admin/overview', [\App\Controllers\SuperAdminController::class, 'overview'], $superAdminMiddleware);
|
||||
$router->get('/api/super-admin/payouts', [\App\Controllers\SuperAdminController::class, 'payouts'], $superAdminMiddleware);
|
||||
$router->get('/api/super-admin/ai-nodes', [\App\Controllers\SuperAdminController::class, 'aiNodes'], $superAdminMiddleware);
|
||||
$router->get('/api/super-admin/security-alerts', [\App\Controllers\SuperAdminController::class, 'securityAlerts'], $superAdminMiddleware);
|
||||
|
||||
// OTP Authentication Routes (WhatsApp via Nabeh Gateway + Device Fingerprinting)
|
||||
$router->post('/api/auth/otp/request', [\App\Controllers\AuthController::class, 'requestOtp'], [\App\Middlewares\RateLimitMiddleware::class]);
|
||||
@@ -107,83 +119,83 @@ $router->get('/api/student/profile/status', [\App\Controllers\AuthController::cl
|
||||
$router->post('/api/student/profile/setup', [\App\Controllers\AuthController::class, 'studentProfileSetup'], [\App\Middlewares\RateLimitMiddleware::class]);
|
||||
|
||||
// Guardian Routes (Authenticated)
|
||||
$router->get('/api/guardian/dashboard', [\App\Controllers\GuardianController::class, 'getDashboard'], [\App\Middlewares\AuthMiddleware::class]);
|
||||
|
||||
// Legacy / Direct Auth
|
||||
$router->post('/api/auth/register', [\App\Controllers\AuthController::class, 'register'], [\App\Middlewares\RateLimitMiddleware::class]);
|
||||
$router->post('/api/auth/login', [\App\Controllers\AuthController::class, 'login'], [\App\Middlewares\RateLimitMiddleware::class]);
|
||||
$router->get('/api/guardian/dashboard', [\App\Controllers\GuardianController::class, 'getDashboard'], $guardianMiddleware);
|
||||
$router->post('/api/guardian/children/link-requests', [\App\Controllers\GuardianController::class, 'requestChildLink'], $guardianMiddleware);
|
||||
$router->get('/api/student/guardian-link-requests', [\App\Controllers\GuardianController::class, 'pendingLinkRequests'], $studentMiddleware);
|
||||
$router->post('/api/student/guardian-link-requests/review', [\App\Controllers\GuardianController::class, 'reviewLinkRequest'], $studentMiddleware);
|
||||
|
||||
// Teacher Studio Routes (Authenticated)
|
||||
$router->get('/api/teacher/profile/status', [\App\Controllers\TeacherController::class, 'profileStatus'], [\App\Middlewares\AuthMiddleware::class]);
|
||||
$router->post('/api/teacher/profile/setup', [\App\Controllers\TeacherController::class, 'setupProfile'], [\App\Middlewares\AuthMiddleware::class]);
|
||||
$router->get('/api/teacher/dashboard', [\App\Controllers\TeacherController::class, 'getDashboard'], [\App\Middlewares\AuthMiddleware::class]);
|
||||
$router->get('/api/teacher/courses', [\App\Controllers\TeacherController::class, 'getCourses'], [\App\Middlewares\AuthMiddleware::class]);
|
||||
$router->post('/api/teacher/courses', [\App\Controllers\TeacherController::class, 'addCourse'], [\App\Middlewares\AuthMiddleware::class]);
|
||||
$router->post('/api/teacher/lessons', [\App\Controllers\TeacherController::class, 'addLesson'], [\App\Middlewares\AuthMiddleware::class]);
|
||||
$router->post('/api/teacher/broadcast', [\App\Controllers\TeacherController::class, 'broadcastToClass'], [\App\Middlewares\AuthMiddleware::class]);
|
||||
$router->get('/api/teacher/profile/status', [\App\Controllers\TeacherController::class, 'profileStatus'], $teacherMiddleware);
|
||||
$router->post('/api/teacher/profile/setup', [\App\Controllers\TeacherController::class, 'setupProfile'], $teacherMiddleware);
|
||||
$router->get('/api/teacher/dashboard', [\App\Controllers\TeacherController::class, 'getDashboard'], $teacherMiddleware);
|
||||
$router->get('/api/teacher/courses', [\App\Controllers\TeacherController::class, 'getCourses'], $teacherMiddleware);
|
||||
$router->post('/api/teacher/courses', [\App\Controllers\TeacherController::class, 'addCourse'], $teacherMiddleware);
|
||||
$router->post('/api/teacher/lessons', [\App\Controllers\TeacherController::class, 'addLesson'], $teacherMiddleware);
|
||||
$router->post('/api/teacher/broadcast', [\App\Controllers\TeacherController::class, 'broadcastToClass'], $teacherMiddleware);
|
||||
|
||||
// Dual Video Storage & Cloudflare R2 / HLS Stream Routes (API-Driven)
|
||||
$router->post('/api/teacher/videos/upload-direct', [\App\Controllers\VideoController::class, 'uploadDirect'], [\App\Middlewares\AuthMiddleware::class]);
|
||||
$router->post('/api/teacher/lessons/checkpoints', [\App\Controllers\VideoController::class, 'saveCheckpoint'], [\App\Middlewares\AuthMiddleware::class]);
|
||||
$router->get('/api/student/lessons', [\App\Controllers\VideoController::class, 'getStudentLessons']);
|
||||
$router->get('/api/videos/stream/{uuid}', [\App\Controllers\VideoController::class, 'streamLocalVideo']);
|
||||
$router->get('/api/videos/hls/{uuid}/{file}', [\App\Controllers\VideoController::class, 'streamHls']);
|
||||
$router->get('/api/lessons/playback', [\App\Controllers\VideoController::class, 'getPlaybackData']);
|
||||
$router->get('/api/lessons/{id}/playback', [\App\Controllers\VideoController::class, 'getPlaybackData']);
|
||||
$router->post('/api/teacher/videos/upload-direct', [\App\Controllers\VideoController::class, 'uploadDirect'], $teacherMiddleware);
|
||||
$router->post('/api/teacher/lessons/checkpoints', [\App\Controllers\VideoController::class, 'saveCheckpoint'], $teacherMiddleware);
|
||||
$router->get('/api/student/lessons', [\App\Controllers\VideoController::class, 'getStudentLessons'], [\App\Middlewares\AuthMiddleware::class]);
|
||||
$router->get('/api/videos/stream/{uuid}', [\App\Controllers\VideoController::class, 'streamLocalVideo'], [\App\Middlewares\AuthMiddleware::class]);
|
||||
$router->get('/api/videos/hls/{uuid}/{file}', [\App\Controllers\VideoController::class, 'streamHls'], [\App\Middlewares\AuthMiddleware::class]);
|
||||
$router->get('/api/lessons/playback', [\App\Controllers\VideoController::class, 'getPlaybackData'], [\App\Middlewares\AuthMiddleware::class]);
|
||||
$router->get('/api/lessons/{id}/playback', [\App\Controllers\VideoController::class, 'getPlaybackData'], [\App\Middlewares\AuthMiddleware::class]);
|
||||
|
||||
// Student & Teacher Chat Routes (API-Driven, Authenticated)
|
||||
$router->get('/api/chat/conversations', [\App\Controllers\ChatController::class, 'getConversations'], [\App\Middlewares\AuthMiddleware::class]);
|
||||
$router->get('/api/chat/messages', [\App\Controllers\ChatController::class, 'getMessages'], [\App\Middlewares\AuthMiddleware::class]);
|
||||
$router->post('/api/chat/messages', [\App\Controllers\ChatController::class, 'sendMessage'], [\App\Middlewares\AuthMiddleware::class]);
|
||||
$router->post('/api/chat/read', [\App\Controllers\ChatController::class, 'markAsRead'], [\App\Middlewares\AuthMiddleware::class]);
|
||||
$router->get('/api/chat/unread-count', [\App\Controllers\ChatController::class, 'getUnreadCount'], [\App\Middlewares\AuthMiddleware::class]);
|
||||
$router->get('/api/chat/conversations', [\App\Controllers\ChatController::class, 'getConversations'], $chatMiddleware);
|
||||
$router->get('/api/chat/messages', [\App\Controllers\ChatController::class, 'getMessages'], $chatMiddleware);
|
||||
$router->post('/api/chat/messages', [\App\Controllers\ChatController::class, 'sendMessage'], $chatMiddleware);
|
||||
$router->post('/api/chat/read', [\App\Controllers\ChatController::class, 'markAsRead'], $chatMiddleware);
|
||||
$router->get('/api/chat/unread-count', [\App\Controllers\ChatController::class, 'getUnreadCount'], $chatMiddleware);
|
||||
|
||||
// Multi-Level Exams & AI Mastery Analytics Routes (API-Driven)
|
||||
$router->get('/api/exams', [\App\Controllers\ExamController::class, 'getExams'], [\App\Middlewares\AuthMiddleware::class]);
|
||||
$router->get('/api/exams/{id}', [\App\Controllers\ExamController::class, 'getExamDetails'], [\App\Middlewares\AuthMiddleware::class]);
|
||||
$router->post('/api/exams/{id}/submit', [\App\Controllers\ExamController::class, 'submitExam'], [\App\Middlewares\AuthMiddleware::class]);
|
||||
$router->get('/api/student/progress/mastery', [\App\Controllers\ExamController::class, 'getMastery'], [\App\Middlewares\AuthMiddleware::class]);
|
||||
$router->post('/api/student/lessons/{id}/progress', [\App\Controllers\VideoController::class, 'saveProgress'], [\App\Middlewares\AuthMiddleware::class]);
|
||||
$router->get('/api/exams', [\App\Controllers\ExamController::class, 'getExams'], $studentMiddleware);
|
||||
$router->get('/api/exams/{id}', [\App\Controllers\ExamController::class, 'getExamDetails'], $studentMiddleware);
|
||||
$router->post('/api/exams/{id}/submit', [\App\Controllers\ExamController::class, 'submitExam'], $studentMiddleware);
|
||||
$router->get('/api/student/progress/mastery', [\App\Controllers\ExamController::class, 'getMastery'], $studentMiddleware);
|
||||
$router->post('/api/student/lessons/{id}/progress', [\App\Controllers\VideoController::class, 'saveProgress'], $studentMiddleware);
|
||||
|
||||
// Smart Error Notebook & Adaptive Remediation Routes (دفتر الأخطاء الذكي والمسارات العلاجية)
|
||||
$router->get('/api/student/error-notebook', [\App\Controllers\ErrorNotebookController::class, 'getErrorNotebook']);
|
||||
$router->post('/api/student/error-notebook/log', [\App\Controllers\ErrorNotebookController::class, 'logError']);
|
||||
$router->get('/api/student/error-notebook/remediation-quiz', [\App\Controllers\ErrorNotebookController::class, 'getRemediationQuiz']);
|
||||
$router->post('/api/student/error-notebook/resolve', [\App\Controllers\ErrorNotebookController::class, 'resolveError']);
|
||||
$router->get('/api/student/error-notebook', [\App\Controllers\ErrorNotebookController::class, 'getErrorNotebook'], $studentMiddleware);
|
||||
$router->post('/api/student/error-notebook/log', [\App\Controllers\ErrorNotebookController::class, 'logError'], $studentMiddleware);
|
||||
$router->get('/api/student/error-notebook/remediation-quiz', [\App\Controllers\ErrorNotebookController::class, 'getRemediationQuiz'], $studentMiddleware);
|
||||
$router->post('/api/student/error-notebook/resolve', [\App\Controllers\ErrorNotebookController::class, 'resolveError'], $studentMiddleware);
|
||||
|
||||
// Multi-Teacher Marketplace & Fair Reputation Routes (AI Telemetry + Anti-Brigade Defense)
|
||||
$router->get('/api/teachers', [\App\Controllers\TeacherController::class, 'getMarketplaceTeachers']);
|
||||
$router->get('/api/teachers/{id}/metrics', [\App\Controllers\TeacherController::class, 'getTeacherMetrics']);
|
||||
$router->post('/api/teachers/{id}/reviews', [\App\Controllers\TeacherController::class, 'submitReview'], [\App\Middlewares\AuthMiddleware::class]);
|
||||
$router->get('/api/teacher/reputation', [\App\Controllers\TeacherController::class, 'getMyReputation'], [\App\Middlewares\AuthMiddleware::class]);
|
||||
$router->get('/api/teacher/monetization', [\App\Controllers\TeacherController::class, 'getMonetizationDashboard']);
|
||||
$router->post('/api/teacher/audit-studio-video', [\App\Controllers\TeacherController::class, 'auditStudioVideo']);
|
||||
$router->get('/api/teacher/monetization', [\App\Controllers\TeacherController::class, 'getMonetizationDashboard'], $teacherMiddleware);
|
||||
$router->post('/api/teacher/audit-studio-video', [\App\Controllers\TeacherController::class, 'auditStudioVideo'], $teacherMiddleware);
|
||||
$router->get('/api/teacher/qna', [\App\Controllers\TeacherController::class, 'getQnA'], $teacherMiddleware);
|
||||
|
||||
$router->get('/api/curriculum/interactive-lab', [\App\Controllers\CurriculumController::class, 'getInteractiveLab']);
|
||||
|
||||
// Military Culture Directorate & School Principal/Supervisor Routes (Institutional Architecture)
|
||||
$router->get('/api/directorate/dashboard', [\App\Controllers\DirectorateSupervisorController::class, 'getDirectorateDashboard']);
|
||||
$router->get('/api/supervisor/school-dashboard', [\App\Controllers\DirectorateSupervisorController::class, 'getSchoolDashboard']);
|
||||
$router->post('/api/supervisor/record-lesson', [\App\Controllers\DirectorateSupervisorController::class, 'recordLesson']);
|
||||
$router->post('/api/supervisor/exam/push-to-lab', [\App\Controllers\DirectorateSupervisorController::class, 'pushExamToLab']);
|
||||
$router->post('/api/supervisor/exam/upload-panoramic', [\App\Controllers\DirectorateSupervisorController::class, 'uploadPanoramicSample']);
|
||||
$router->get('/api/directorate/dashboard', [\App\Controllers\DirectorateSupervisorController::class, 'getDirectorateDashboard'], $institutionalMiddleware);
|
||||
$router->get('/api/supervisor/school-dashboard', [\App\Controllers\DirectorateSupervisorController::class, 'getSchoolDashboard'], $institutionalMiddleware);
|
||||
$router->post('/api/supervisor/record-lesson', [\App\Controllers\DirectorateSupervisorController::class, 'recordLesson'], $institutionalMiddleware);
|
||||
$router->post('/api/supervisor/exam/push-to-lab', [\App\Controllers\DirectorateSupervisorController::class, 'pushExamToLab'], $institutionalMiddleware);
|
||||
$router->post('/api/supervisor/exam/upload-panoramic', [\App\Controllers\DirectorateSupervisorController::class, 'uploadPanoramicSample'], $institutionalMiddleware);
|
||||
|
||||
// Dual-Form Unified Exams & Statistical Anti-Cheating
|
||||
$router->get('/api/unified-exams/dual-forms', [\App\Controllers\DirectorateSupervisorController::class, 'generateDualForms']);
|
||||
$router->post('/api/unified-exams/evaluate-integrity', [\App\Controllers\DirectorateSupervisorController::class, 'evaluateExamSessionIntegrity']);
|
||||
$router->get('/api/unified-exams/dual-forms', [\App\Controllers\DirectorateSupervisorController::class, 'generateDualForms'], $institutionalMiddleware);
|
||||
$router->post('/api/unified-exams/evaluate-integrity', [\App\Controllers\DirectorateSupervisorController::class, 'evaluateExamSessionIntegrity'], $institutionalMiddleware);
|
||||
|
||||
// Automated Parent Reporting via WhatsApp / Nabeh Gateway
|
||||
$router->post('/api/parent-reports/dispatch', [\App\Controllers\DirectorateSupervisorController::class, 'dispatchParentReports']);
|
||||
$router->post('/api/parent-reports/dispatch', [\App\Controllers\DirectorateSupervisorController::class, 'dispatchParentReports'], $institutionalMiddleware);
|
||||
|
||||
// School Roster Import & Encrypted National ID Engine (AES-256-GCM)
|
||||
$router->post('/api/school-roster/import', [\App\Controllers\DirectorateSupervisorController::class, 'importSchoolRoster']);
|
||||
$router->post('/api/school-roster/import', [\App\Controllers\DirectorateSupervisorController::class, 'importSchoolRoster'], $institutionalMiddleware);
|
||||
|
||||
// CliQ Instant Payments (Siro Pattern) & Teacher Payout Queue
|
||||
$router->post('/api/payment/cliq/initiate', [\App\Controllers\CliqPaymentController::class, 'initiatePayment']);
|
||||
$router->post('/api/payment/cliq/submit-receipt', [\App\Controllers\CliqPaymentController::class, 'submitReceipt']);
|
||||
$router->post('/api/teacher/payout/request', [\App\Controllers\CliqPaymentController::class, 'requestTeacherPayout']);
|
||||
$router->get('/api/teacher/payout/status', [\App\Controllers\CliqPaymentController::class, 'getTeacherPayoutStatus']);
|
||||
$router->post('/api/admin/payout/process-queue', [\App\Controllers\CliqPaymentController::class, 'processPayoutQueue']);
|
||||
$router->post('/api/payment/cliq/initiate', [\App\Controllers\CliqPaymentController::class, 'initiatePayment'], $studentMiddleware);
|
||||
$router->post('/api/payment/cliq/submit-receipt', [\App\Controllers\CliqPaymentController::class, 'submitReceipt'], $studentMiddleware);
|
||||
$router->post('/api/teacher/payout/request', [\App\Controllers\CliqPaymentController::class, 'requestTeacherPayout'], $teacherMiddleware);
|
||||
$router->get('/api/teacher/payout/status', [\App\Controllers\CliqPaymentController::class, 'getTeacherPayoutStatus'], $teacherMiddleware);
|
||||
$router->post('/api/admin/payout/process-queue', [\App\Controllers\CliqPaymentController::class, 'processPayoutQueue'], $superAdminMiddleware);
|
||||
|
||||
// Curriculum Integrated Map (Vertical & Horizontal Synergy)
|
||||
$router->get('/api/curriculum/integrated-map', function ($request, $response) {
|
||||
|
||||
Reference in New Issue
Block a user