Appearance
Legacy Route Snapshot
Task: P3-001 Capture legacy OpenAPI/route snapshot Capture date: 2026-07-05 Framework: NestJS Global prefix: /api Compatibility aliases: /api/v1/* -> /api/* Route count: 430 Controller files: 36 Snapshot SHA-256: 645db45d2650a8804dfc128e80a8a69b3a90ddcfaf4b0e60eac4bb193b82b5ec
Evidence
- Static source of truth: NestJS controller decorators under
node-platform/apps/api/src/**/*.controller.ts. - Global API prefix and
/api/v1rewrite are documented innode-platform/apps/api/src/main.ts. - This artifact is generated by
go-platform/scripts/test/legacy-route-snapshot.mjswithout editing legacy source.
Method Counts
| Method | Count |
|---|---|
| DELETE | 38 |
| GET | 173 |
| PATCH | 48 |
| POST | 171 |
Prefix Counts
| Prefix | Count |
|---|---|
/api/admin | 79 |
/api/alerts | 3 |
/api/analytics | 2 |
/api/assistant | 3 |
/api/attempts | 6 |
/api/auth | 20 |
/api/classrooms | 45 |
/api/courses | 33 |
/api/curriculum-nodes | 1 |
/api/curriculums | 1 |
/api/dashboard | 2 |
/api/documents | 11 |
/api/education-levels | 1 |
/api/exam-blueprints | 7 |
/api/exam-folders | 4 |
/api/exam-import | 30 |
/api/exam-links | 4 |
/api/exam-paper-templates | 10 |
/api/exam-print-templates | 6 |
/api/exam-sections | 1 |
/api/exam-tracks | 1 |
/api/exams | 30 |
/api/feature-maintenance | 1 |
/api/formula-candidates | 3 |
/api/grades | 1 |
/api/health | 2 |
/api/hooks | 1 |
/api/imports | 1 |
/api/metrics | 1 |
/api/notifications | 5 |
/api/organizations | 15 |
/api/parent | 3 |
/api/parents | 2 |
/api/progress | 3 |
/api/public | 6 |
/api/question-sources | 1 |
/api/question-taxonomy | 1 |
/api/questions | 42 |
/api/storage | 4 |
/api/student | 10 |
/api/student-imports | 2 |
/api/students | 1 |
/api/subjects | 2 |
/api/support | 5 |
/api/taxonomy | 4 |
/api/wallet | 14 |
Routes
| Method | Legacy Path | Legacy Handler | Evidence |
|---|---|---|---|
| GET | /api/admin/ai-settings | AdminAiSettingsController.get | node-platform/apps/api/src/modules/admin/ai-settings.controller.ts:23 |
| PATCH | /api/admin/ai-settings | AdminAiSettingsController.update | node-platform/apps/api/src/modules/admin/ai-settings.controller.ts:28 |
| POST | /api/admin/ai-settings/test-connection | AdminAiSettingsController.testConnection | node-platform/apps/api/src/modules/admin/ai-settings.controller.ts:33 |
| GET | /api/admin/ai-settings/usage | AdminAiSettingsController.usage | node-platform/apps/api/src/modules/admin/ai-settings.controller.ts:42 |
| GET | /api/admin/auth-settings/google | AdminAuthSettingsController.googleSettings | node-platform/apps/api/src/modules/auth/google-auth-settings.controller.ts:21 |
| PATCH | /api/admin/auth-settings/google | AdminAuthSettingsController.updateGoogleSettings | node-platform/apps/api/src/modules/auth/google-auth-settings.controller.ts:26 |
| POST | /api/admin/az-credit/limit-overrides | AdminAzCreditController.upsertLimitOverride | node-platform/apps/api/src/modules/wallet/az-credit.controller.ts:74 |
| GET | /api/admin/az-credit/overview | AdminAzCreditController.overview | node-platform/apps/api/src/modules/wallet/az-credit.controller.ts:49 |
| GET | /api/admin/az-credit/pricing | AdminAzCreditController.pricing | node-platform/apps/api/src/modules/wallet/az-credit.controller.ts:54 |
| PATCH | /api/admin/az-credit/subscription-requests/:id | AdminAzCreditController.reviewSubscriptionRequest | node-platform/apps/api/src/modules/wallet/az-credit.controller.ts:69 |
| PATCH | /api/admin/az-credit/users/:userId/subscription | AdminAzCreditController.assignSubscription | node-platform/apps/api/src/modules/wallet/az-credit.controller.ts:59 |
| GET | /api/admin/classrooms | AdminClassroomsController.list | node-platform/apps/api/src/modules/classrooms/classrooms.controller.ts:813 |
| POST | /api/admin/classrooms | AdminClassroomsController.createClassroomAdmin | node-platform/apps/api/src/modules/classrooms/classrooms.controller.ts:936 |
| GET | /api/admin/classrooms/:id | AdminClassroomsController.getOne | node-platform/apps/api/src/modules/classrooms/classrooms.controller.ts:1280 |
| PATCH | /api/admin/classrooms/:id | AdminClassroomsController.updateClassroom | node-platform/apps/api/src/modules/classrooms/classrooms.controller.ts:1094 |
| GET | /api/admin/classrooms/:id/members | AdminClassroomsController.listMembers | node-platform/apps/api/src/modules/classrooms/classrooms.controller.ts:1329 |
| POST | /api/admin/classrooms/:id/members | AdminClassroomsController.addMember | node-platform/apps/api/src/modules/classrooms/classrooms.controller.ts:1354 |
| DELETE | /api/admin/classrooms/:id/members/:userId | AdminClassroomsController.removeMember | node-platform/apps/api/src/modules/classrooms/classrooms.controller.ts:1388 |
| DELETE | /api/admin/classrooms/:id/purge | AdminClassroomsController.purge | node-platform/apps/api/src/modules/classrooms/classrooms.controller.ts:1417 |
| GET | /api/admin/documents | AdminTeachingDocumentsController.list | node-platform/apps/api/src/modules/documents/documents.controller.ts:127 |
| POST | /api/admin/documents | AdminTeachingDocumentsController.create | node-platform/apps/api/src/modules/documents/documents.controller.ts:122 |
| DELETE | /api/admin/documents/:id | AdminTeachingDocumentsController.remove | node-platform/apps/api/src/modules/documents/documents.controller.ts:179 |
| GET | /api/admin/documents/:id | AdminTeachingDocumentsController.detail | node-platform/apps/api/src/modules/documents/documents.controller.ts:159 |
| PATCH | /api/admin/documents/:id | AdminTeachingDocumentsController.update | node-platform/apps/api/src/modules/documents/documents.controller.ts:164 |
| POST | /api/admin/documents/:id/approve | AdminTeachingDocumentsController.approve | node-platform/apps/api/src/modules/documents/documents.controller.ts:149 |
| POST | /api/admin/documents/:id/archive | AdminTeachingDocumentsController.archive | node-platform/apps/api/src/modules/documents/documents.controller.ts:174 |
| POST | /api/admin/documents/:id/reject | AdminTeachingDocumentsController.reject | node-platform/apps/api/src/modules/documents/documents.controller.ts:154 |
| GET | /api/admin/exams | AdminExamManagementController.list | node-platform/apps/api/src/modules/admin/content-admin.controller.ts:39 |
| POST | /api/admin/exams | AdminExamManagementController.create | node-platform/apps/api/src/modules/admin/content-admin.controller.ts:54 |
| DELETE | /api/admin/exams/:id | AdminExamManagementController.remove | node-platform/apps/api/src/modules/admin/content-admin.controller.ts:73 |
| GET | /api/admin/exams/:id | AdminExamManagementController.detail | node-platform/apps/api/src/modules/admin/content-admin.controller.ts:59 |
| PATCH | /api/admin/exams/:id | AdminExamManagementController.update | node-platform/apps/api/src/modules/admin/content-admin.controller.ts:64 |
| GET | /api/admin/exams/:id/delete-impact | AdminExamsController.deleteImpact | node-platform/apps/api/src/modules/exams/exams.controller.ts:466 |
| DELETE | /api/admin/exams/:id/purge | AdminExamsController.purge | node-platform/apps/api/src/modules/exams/exams.controller.ts:471 |
| GET | /api/admin/feature-maintenance | AdminFeatureMaintenanceController.list | node-platform/apps/api/src/modules/admin/feature-maintenance.controller.ts:29 |
| PATCH | /api/admin/feature-maintenance/:key | AdminFeatureMaintenanceController.update | node-platform/apps/api/src/modules/admin/feature-maintenance.controller.ts:34 |
| GET | /api/admin/files | AdminFilesController.list | node-platform/apps/api/src/modules/admin/content-admin.controller.ts:87 |
| DELETE | /api/admin/files/:source/:id | AdminFilesController.remove | node-platform/apps/api/src/modules/admin/content-admin.controller.ts:152 |
| GET | /api/admin/files/:source/:id | AdminFilesController.detail | node-platform/apps/api/src/modules/admin/content-admin.controller.ts:108 |
| PATCH | /api/admin/files/:source/:id | AdminFilesController.update | node-platform/apps/api/src/modules/admin/content-admin.controller.ts:128 |
| GET | /api/admin/files/:source/:id/download | AdminFilesController.download | node-platform/apps/api/src/modules/admin/content-admin.controller.ts:113 |
| POST | /api/admin/inbox/messages | AdminInboxController.sendBroadcast | node-platform/apps/api/src/modules/admin/inbox.controller.ts:74 |
| GET | /api/admin/inbox/targets | AdminInboxController.targets | node-platform/apps/api/src/modules/admin/inbox.controller.ts:40 |
| GET | /api/admin/operations/audit | AdminOperationsController.auditLogs | node-platform/apps/api/src/modules/admin/operations.controller.ts:176 |
| GET | /api/admin/operations/health | AdminOperationsController.health | node-platform/apps/api/src/modules/admin/operations.controller.ts:99 |
| GET | /api/admin/operations/import-jobs | AdminOperationsController.importJobs | node-platform/apps/api/src/modules/admin/operations.controller.ts:231 |
| POST | /api/admin/operations/maintenance/clear | AdminOperationsController.clearFailedOutbox | node-platform/apps/api/src/modules/admin/operations.controller.ts:113 |
| GET | /api/admin/operations/metrics | AdminOperationsController.metrics | node-platform/apps/api/src/modules/admin/operations.controller.ts:199 |
| GET | /api/admin/operations/outbox | AdminOperationsController.outbox | node-platform/apps/api/src/modules/admin/operations.controller.ts:243 |
| GET | /api/admin/operations/queues | AdminOperationsController.queues | node-platform/apps/api/src/modules/admin/operations.controller.ts:108 |
| POST | /api/admin/operations/queues/:queueName/retry-failed | AdminOperationsController.retryFailedQueue | node-platform/apps/api/src/modules/admin/operations.controller.ts:134 |
| GET | /api/admin/overview | AdminDashboardController.overview | node-platform/apps/api/src/modules/admin/admin-dashboard.controller.ts:93 |
| GET | /api/admin/users | AdminUsersController.list | node-platform/apps/api/src/modules/admin/users.controller.ts:47 |
| GET | /api/admin/users/:id | AdminUsersController.getById | node-platform/apps/api/src/modules/admin/users.controller.ts:118 |
| PATCH | /api/admin/users/:id | AdminUsersController.update | node-platform/apps/api/src/modules/admin/users.controller.ts:146 |
| POST | /api/admin/users/:id/activate | AdminUsersController.activate | node-platform/apps/api/src/modules/admin/users.controller.ts:198 |
| POST | /api/admin/users/:id/deactivate | AdminUsersController.deactivate | node-platform/apps/api/src/modules/admin/users.controller.ts:193 |
| POST | /api/admin/users/:id/impersonate | AdminUsersController.impersonate | node-platform/apps/api/src/modules/admin/users.controller.ts:264 |
| PATCH | /api/admin/users/:id/organization-role | AdminUsersController.setOrganizationRole | node-platform/apps/api/src/modules/admin/users.controller.ts:215 |
| DELETE | /api/admin/users/:id/purge | AdminUsersController.purge | node-platform/apps/api/src/modules/admin/users.controller.ts:203 |
| POST | /api/admin/users/:id/reset-password | AdminUsersController.resetPassword | node-platform/apps/api/src/modules/admin/users.controller.ts:244 |
| GET | /api/admin/users/kyc/teacher | AdminUsersController.listTeacherKyc | node-platform/apps/api/src/modules/admin/users.controller.ts:67 |
| GET | /api/admin/users/kyc/teacher/:userId | AdminUsersController.getTeacherKycDetail | node-platform/apps/api/src/modules/admin/users.controller.ts:84 |
| POST | /api/admin/users/kyc/teacher/:userId/approve | AdminUsersController.approveTeacherKyc | node-platform/apps/api/src/modules/admin/users.controller.ts:93 |
| POST | /api/admin/users/kyc/teacher/:userId/reject | AdminUsersController.rejectTeacherKyc | node-platform/apps/api/src/modules/admin/users.controller.ts:105 |
| POST | /api/admin/users/reset-password | AdminUsersController.resetPasswordByBody | node-platform/apps/api/src/modules/admin/users.controller.ts:123 |
| GET | /api/admin/wallet-payment-evidence | AdminWalletPaymentEvidenceController.list | node-platform/apps/api/src/modules/wallet/wallet.controller.ts:190 |
| POST | /api/admin/wallet-payment-evidence/:id/review | AdminWalletPaymentEvidenceController.review | node-platform/apps/api/src/modules/wallet/wallet.controller.ts:199 |
| GET | /api/admin/wallet-settings | AdminWalletSettingsController.get | node-platform/apps/api/src/modules/wallet/wallet.controller.ts:245 |
| PATCH | /api/admin/wallet-settings | AdminWalletSettingsController.update | node-platform/apps/api/src/modules/wallet/wallet.controller.ts:250 |
| GET | /api/admin/wallet-topups | AdminWalletTopUpsController.list | node-platform/apps/api/src/modules/wallet/wallet.controller.ts:166 |
| POST | /api/admin/wallet-topups/:id/approve | AdminWalletTopUpsController.approve | node-platform/apps/api/src/modules/wallet/wallet.controller.ts:171 |
| POST | /api/admin/wallet-topups/:id/reject | AdminWalletTopUpsController.reject | node-platform/apps/api/src/modules/wallet/wallet.controller.ts:176 |
| GET | /api/admin/wallet-withdrawals | AdminWalletWithdrawalsController.list | node-platform/apps/api/src/modules/wallet/wallet.controller.ts:221 |
| POST | /api/admin/wallet-withdrawals/:id/mark-paid | AdminWalletWithdrawalsController.markPaid | node-platform/apps/api/src/modules/wallet/wallet.controller.ts:226 |
| POST | /api/admin/wallet-withdrawals/:id/reject | AdminWalletWithdrawalsController.reject | node-platform/apps/api/src/modules/wallet/wallet.controller.ts:231 |
| GET | /api/admin/wallets | AdminWalletsController.list | node-platform/apps/api/src/modules/wallet/wallet.controller.ts:142 |
| GET | /api/admin/wallets/:userId | AdminWalletsController.detail | node-platform/apps/api/src/modules/wallet/wallet.controller.ts:147 |
| POST | /api/admin/wallets/:userId/adjust | AdminWalletsController.adjust | node-platform/apps/api/src/modules/wallet/wallet.controller.ts:152 |
| GET | /api/alerts/preferences | WeakTopicAlertsController.getPreferences | node-platform/apps/api/src/modules/notifications/notifications.controller.ts:115 |
| PATCH | /api/alerts/preferences | WeakTopicAlertsController.updatePreferences | node-platform/apps/api/src/modules/notifications/notifications.controller.ts:122 |
| POST | /api/alerts/weak-topic | WeakTopicAlertsController.createWeakTopic | node-platform/apps/api/src/modules/notifications/notifications.controller.ts:107 |
| GET | /api/analytics/results | AnalyticsController.results | node-platform/apps/api/src/modules/analytics/analytics.controller.ts:18 |
| GET | /api/analytics/weak-topics | AnalyticsController.weakTopics | node-platform/apps/api/src/modules/analytics/analytics.controller.ts:56 |
| POST | /api/assistant/chat | AssistantController.chat | node-platform/apps/api/src/modules/assistant/assistant.controller.ts:55 |
| POST | /api/assistant/chat/stream | AssistantController.chatStream | node-platform/apps/api/src/modules/assistant/assistant.controller.ts:87 |
| GET | /api/assistant/config | AssistantController.getConfig | node-platform/apps/api/src/modules/assistant/assistant.controller.ts:143 |
| GET | /api/attempts/:attemptId | AttemptsController.detail | node-platform/apps/api/src/modules/attempts/attempts.controller.ts:14 |
| POST | /api/attempts/:attemptId/answers | AttemptsController.saveAnswer | node-platform/apps/api/src/modules/attempts/attempts.controller.ts:21 |
| GET | /api/attempts/:attemptId/events | AttemptsController.events | node-platform/apps/api/src/modules/attempts/attempts.controller.ts:59 |
| POST | /api/attempts/:attemptId/events | AttemptsController.event | node-platform/apps/api/src/modules/attempts/attempts.controller.ts:48 |
| GET | /api/attempts/:attemptId/result | AttemptsController.result | node-platform/apps/api/src/modules/attempts/attempts.controller.ts:66 |
| POST | /api/attempts/:attemptId/submit | AttemptsController.submit | node-platform/apps/api/src/modules/attempts/attempts.controller.ts:41 |
| POST | /api/auth/forgot-password | AuthController.forgotPassword | node-platform/apps/api/src/modules/auth/auth.controller.ts:108 |
| POST | /api/auth/google | AuthController.googleAuth | node-platform/apps/api/src/modules/auth/auth.controller.ts:70 |
| GET | /api/auth/google/config | AuthController.googleConfig | node-platform/apps/api/src/modules/auth/auth.controller.ts:65 |
| GET | /api/auth/local-accounts | AuthController.localAccounts | node-platform/apps/api/src/modules/auth/auth.controller.ts:48 |
| POST | /api/auth/login | AuthController.login | node-platform/apps/api/src/modules/auth/auth.controller.ts:60 |
| POST | /api/auth/logout | AuthController.logout | node-platform/apps/api/src/modules/auth/auth.controller.ts:96 |
| GET | /api/auth/me | AuthController.me | node-platform/apps/api/src/modules/auth/auth.controller.ts:205 |
| POST | /api/auth/me/email/request-change | AuthController.requestEmailChange | node-platform/apps/api/src/modules/auth/auth.controller.ts:185 |
| POST | /api/auth/me/email/verify | AuthController.verifyEmail | node-platform/apps/api/src/modules/auth/auth.controller.ts:197 |
| GET | /api/auth/me/kyc/teacher | AuthController.getTeacherKyc | node-platform/apps/api/src/modules/auth/auth.controller.ts:177 |
| POST | /api/auth/me/kyc/teacher | AuthController.submitTeacherKyc | node-platform/apps/api/src/modules/auth/auth.controller.ts:164 |
| PATCH | /api/auth/me/parent-profile | AuthController.updateParentProfile | node-platform/apps/api/src/modules/auth/auth.controller.ts:150 |
| POST | /api/auth/me/password | AuthController.changePassword | node-platform/apps/api/src/modules/auth/auth.controller.ts:229 |
| PATCH | /api/auth/me/profile | AuthController.updateProfile | node-platform/apps/api/src/modules/auth/auth.controller.ts:212 |
| PATCH | /api/auth/me/student-profile | AuthController.updateStudentProfile | node-platform/apps/api/src/modules/auth/auth.controller.ts:137 |
| PATCH | /api/auth/me/teacher-profile | AuthController.updateTeacherProfile | node-platform/apps/api/src/modules/auth/auth.controller.ts:124 |
| POST | /api/auth/refresh | AuthController.refresh | node-platform/apps/api/src/modules/auth/auth.controller.ts:84 |
| POST | /api/auth/register | AuthController.register | node-platform/apps/api/src/modules/auth/auth.controller.ts:53 |
| POST | /api/auth/reset-password | AuthController.resetPassword | node-platform/apps/api/src/modules/auth/auth.controller.ts:115 |
| POST | /api/auth/test-login | AuthController.testLogin | node-platform/apps/api/src/modules/auth/auth.controller.ts:77 |
| GET | /api/classrooms | ClassroomsController.list | node-platform/apps/api/src/modules/classrooms/classrooms.controller.ts:59 |
| POST | /api/classrooms | ClassroomsController.create | node-platform/apps/api/src/modules/classrooms/classrooms.controller.ts:617 |
| DELETE | /api/classrooms/:id | ClassroomsController.remove | node-platform/apps/api/src/modules/classrooms/classrooms.controller.ts:681 |
| GET | /api/classrooms/:id | ClassroomsController.detail | node-platform/apps/api/src/modules/classrooms/classrooms.controller.ts:80 |
| PATCH | /api/classrooms/:id | ClassroomsController.update | node-platform/apps/api/src/modules/classrooms/classrooms.controller.ts:632 |
| GET | /api/classrooms/:id/analytics | AnalyticsController.classroomAnalytics | node-platform/apps/api/src/modules/analytics/analytics.controller.ts:102 |
| GET | /api/classrooms/:id/announcements | ClassroomsController.announcements | node-platform/apps/api/src/modules/classrooms/classrooms.controller.ts:337 |
| POST | /api/classrooms/:id/announcements | ClassroomsController.createAnnouncement | node-platform/apps/api/src/modules/classrooms/classrooms.controller.ts:431 |
| DELETE | /api/classrooms/:id/announcements/:announcementId | ClassroomsController.deleteAnnouncement | node-platform/apps/api/src/modules/classrooms/classrooms.controller.ts:470 |
| PATCH | /api/classrooms/:id/announcements/:announcementId | ClassroomsController.updateAnnouncement | node-platform/apps/api/src/modules/classrooms/classrooms.controller.ts:447 |
| GET | /api/classrooms/:id/dashboard | ClassroomsController.dashboard | node-platform/apps/api/src/modules/classrooms/classrooms.controller.ts:91 |
| GET | /api/classrooms/:id/delete-impact | ClassroomsController.deleteImpact | node-platform/apps/api/src/modules/classrooms/classrooms.controller.ts:669 |
| GET | /api/classrooms/:id/exam-assignments | ClassroomsController.examAssignments | node-platform/apps/api/src/modules/classrooms/classrooms.controller.ts:546 |
| POST | /api/classrooms/:id/exam-assignments | ClassroomsController.createExamAssignment | node-platform/apps/api/src/modules/classrooms/classrooms.controller.ts:557 |
| DELETE | /api/classrooms/:id/exam-assignments/:assignmentId | ClassroomsController.deleteExamAssignment | node-platform/apps/api/src/modules/classrooms/classrooms.controller.ts:596 |
| PATCH | /api/classrooms/:id/exam-assignments/:assignmentId | ClassroomsController.updateExamAssignment | node-platform/apps/api/src/modules/classrooms/classrooms.controller.ts:573 |
| GET | /api/classrooms/:id/exams | ClassroomsController.exams | node-platform/apps/api/src/modules/classrooms/classrooms.controller.ts:519 |
| POST | /api/classrooms/:id/exams | ClassroomsController.createExam | node-platform/apps/api/src/modules/classrooms/classrooms.controller.ts:530 |
| POST | /api/classrooms/:id/join | ClassroomsController.join | node-platform/apps/api/src/modules/classrooms/classrooms.controller.ts:696 |
| GET | /api/classrooms/:id/leaderboard | ClassroomsController.leaderboard | node-platform/apps/api/src/modules/classrooms/classrooms.controller.ts:508 |
| GET | /api/classrooms/:id/lessons | ClassroomsController.lessons | node-platform/apps/api/src/modules/classrooms/classrooms.controller.ts:102 |
| POST | /api/classrooms/:id/lessons | ClassroomsController.createLesson | node-platform/apps/api/src/modules/classrooms/classrooms.controller.ts:113 |
| DELETE | /api/classrooms/:id/lessons/:lessonId | ClassroomsController.deleteLesson | node-platform/apps/api/src/modules/classrooms/classrooms.controller.ts:146 |
| PATCH | /api/classrooms/:id/lessons/:lessonId | ClassroomsController.updateLesson | node-platform/apps/api/src/modules/classrooms/classrooms.controller.ts:129 |
| POST | /api/classrooms/:id/lessons/:lessonId/materials | ClassroomsController.addLessonMaterial | node-platform/apps/api/src/modules/classrooms/classrooms.controller.ts:298 |
| DELETE | /api/classrooms/:id/lessons/:lessonId/video | ClassroomsController.detachLessonVideo | node-platform/apps/api/src/modules/classrooms/classrooms.controller.ts:204 |
| GET | /api/classrooms/:id/lessons/:lessonId/video | ClassroomsController.lessonVideo | node-platform/apps/api/src/modules/classrooms/classrooms.controller.ts:162 |
| POST | /api/classrooms/:id/lessons/:lessonId/video | ClassroomsController.attachLessonVideo | node-platform/apps/api/src/modules/classrooms/classrooms.controller.ts:181 |
| GET | /api/classrooms/:id/materials | ClassroomsController.materials | node-platform/apps/api/src/modules/classrooms/classrooms.controller.ts:220 |
| POST | /api/classrooms/:id/materials | ClassroomsController.createMaterial | node-platform/apps/api/src/modules/classrooms/classrooms.controller.ts:240 |
| DELETE | /api/classrooms/:id/materials/:materialId | ClassroomsController.deleteLessonMaterial | node-platform/apps/api/src/modules/classrooms/classrooms.controller.ts:321 |
| PATCH | /api/classrooms/:id/materials/:materialId | ClassroomsController.updateMaterial | node-platform/apps/api/src/modules/classrooms/classrooms.controller.ts:256 |
| GET | /api/classrooms/:id/materials/:materialId/content | ClassroomsController.materialContent | node-platform/apps/api/src/modules/classrooms/classrooms.controller.ts:279 |
| POST | /api/classrooms/:id/notify | ClassroomsController.sendNotification | node-platform/apps/api/src/modules/classrooms/classrooms.controller.ts:492 |
| GET | /api/classrooms/:id/progress | ClassroomsController.progress | node-platform/apps/api/src/modules/classrooms/classrooms.controller.ts:760 |
| GET | /api/classrooms/:id/report/export | AnalyticsController.classroomExport | node-platform/apps/api/src/modules/analytics/analytics.controller.ts:110 |
| PATCH | /api/classrooms/:id/status | ClassroomsController.updateStatus | node-platform/apps/api/src/modules/classrooms/classrooms.controller.ts:648 |
| GET | /api/classrooms/:id/students | ClassroomsController.students | node-platform/apps/api/src/modules/classrooms/classrooms.controller.ts:748 |
| POST | /api/classrooms/:id/students | ClassroomsController.addStudent | node-platform/apps/api/src/modules/classrooms/classrooms.controller.ts:711 |
| DELETE | /api/classrooms/:id/students/:studentId | ClassroomsController.removeStudent | node-platform/apps/api/src/modules/classrooms/classrooms.controller.ts:727 |
| GET | /api/classrooms/:id/tuition | ClassroomsController.tuition | node-platform/apps/api/src/modules/classrooms/classrooms.controller.ts:348 |
| POST | /api/classrooms/:id/tuition-fees | ClassroomsController.createTuitionFee | node-platform/apps/api/src/modules/classrooms/classrooms.controller.ts:359 |
| PATCH | /api/classrooms/:id/tuition-fees/:feeId | ClassroomsController.updateTuitionFee | node-platform/apps/api/src/modules/classrooms/classrooms.controller.ts:375 |
| POST | /api/classrooms/:id/tuition-fees/:feeId/payments | ClassroomsController.recordTuitionPayment | node-platform/apps/api/src/modules/classrooms/classrooms.controller.ts:392 |
| DELETE | /api/classrooms/:id/tuition-payments/:paymentId | ClassroomsController.deleteTuitionPayment | node-platform/apps/api/src/modules/classrooms/classrooms.controller.ts:415 |
| GET | /api/courses | CoursesController.list | node-platform/apps/api/src/modules/courses/courses.controller.ts:51 |
| POST | /api/courses | CoursesController.create | node-platform/apps/api/src/modules/courses/courses.controller.ts:57 |
| DELETE | /api/courses/:id | CoursesController.remove | node-platform/apps/api/src/modules/courses/courses.controller.ts:75 |
| GET | /api/courses/:id | CoursesController.detail | node-platform/apps/api/src/modules/courses/courses.controller.ts:63 |
| PATCH | /api/courses/:id | CoursesController.update | node-platform/apps/api/src/modules/courses/courses.controller.ts:69 |
| GET | /api/courses/:id/enrollments | CoursesController.enrollments | node-platform/apps/api/src/modules/courses/courses.controller.ts:279 |
| POST | /api/courses/:id/enrollments | CoursesController.grantEnrollment | node-platform/apps/api/src/modules/courses/courses.controller.ts:285 |
| DELETE | /api/courses/:id/enrollments/:enrollmentId | CoursesController.deleteEnrollment | node-platform/apps/api/src/modules/courses/courses.controller.ts:303 |
| PATCH | /api/courses/:id/enrollments/:enrollmentId | CoursesController.updateEnrollment | node-platform/apps/api/src/modules/courses/courses.controller.ts:291 |
| GET | /api/courses/:id/lessons | CoursesController.lessons | node-platform/apps/api/src/modules/courses/courses.controller.ts:105 |
| POST | /api/courses/:id/lessons | CoursesController.createLesson | node-platform/apps/api/src/modules/courses/courses.controller.ts:111 |
| DELETE | /api/courses/:id/lessons/:lessonId | CoursesController.deleteLesson | node-platform/apps/api/src/modules/courses/courses.controller.ts:135 |
| GET | /api/courses/:id/lessons/:lessonId | CoursesController.lesson | node-platform/apps/api/src/modules/courses/courses.controller.ts:117 |
| PATCH | /api/courses/:id/lessons/:lessonId | CoursesController.updateLesson | node-platform/apps/api/src/modules/courses/courses.controller.ts:123 |
| GET | /api/courses/:id/lessons/:lessonId/questions | CoursesController.lessonQuestions | node-platform/apps/api/src/modules/courses/courses.controller.ts:141 |
| POST | /api/courses/:id/lessons/:lessonId/questions | CoursesController.createLessonQuestion | node-platform/apps/api/src/modules/courses/courses.controller.ts:147 |
| DELETE | /api/courses/:id/lessons/:lessonId/questions/:linkId | CoursesController.deleteLessonQuestion | node-platform/apps/api/src/modules/courses/courses.controller.ts:159 |
| DELETE | /api/courses/:id/lessons/:lessonId/video | CoursesController.detachLessonVideo | node-platform/apps/api/src/modules/courses/courses.controller.ts:231 |
| GET | /api/courses/:id/lessons/:lessonId/video | CoursesController.lessonVideo | node-platform/apps/api/src/modules/courses/courses.controller.ts:219 |
| POST | /api/courses/:id/lessons/:lessonId/video | CoursesController.attachLessonVideo | node-platform/apps/api/src/modules/courses/courses.controller.ts:207 |
| GET | /api/courses/:id/materials | CoursesController.materials | node-platform/apps/api/src/modules/courses/courses.controller.ts:237 |
| POST | /api/courses/:id/materials | CoursesController.createMaterial | node-platform/apps/api/src/modules/courses/courses.controller.ts:243 |
| DELETE | /api/courses/:id/materials/:materialId | CoursesController.deleteMaterial | node-platform/apps/api/src/modules/courses/courses.controller.ts:273 |
| PATCH | /api/courses/:id/materials/:materialId | CoursesController.updateMaterial | node-platform/apps/api/src/modules/courses/courses.controller.ts:249 |
| GET | /api/courses/:id/materials/:materialId/content | CoursesController.materialContent | node-platform/apps/api/src/modules/courses/courses.controller.ts:261 |
| GET | /api/courses/:id/quizzes | CoursesController.quizzes | node-platform/apps/api/src/modules/courses/courses.controller.ts:171 |
| POST | /api/courses/:id/quizzes | CoursesController.createQuiz | node-platform/apps/api/src/modules/courses/courses.controller.ts:177 |
| DELETE | /api/courses/:id/quizzes/:quizId | CoursesController.deleteQuiz | node-platform/apps/api/src/modules/courses/courses.controller.ts:195 |
| PATCH | /api/courses/:id/quizzes/:quizId | CoursesController.updateQuiz | node-platform/apps/api/src/modules/courses/courses.controller.ts:183 |
| GET | /api/courses/:id/report | CoursesController.report | node-platform/apps/api/src/modules/courses/courses.controller.ts:201 |
| POST | /api/courses/:id/sections | CoursesController.createSection | node-platform/apps/api/src/modules/courses/courses.controller.ts:81 |
| DELETE | /api/courses/:id/sections/:sectionId | CoursesController.deleteSection | node-platform/apps/api/src/modules/courses/courses.controller.ts:99 |
| PATCH | /api/courses/:id/sections/:sectionId | CoursesController.updateSection | node-platform/apps/api/src/modules/courses/courses.controller.ts:87 |
| GET | /api/curriculum-nodes | QuestionTaxonomyController.curriculumNodes | node-platform/apps/api/src/modules/subjects/subjects.controller.ts:48 |
| GET | /api/curriculums | QuestionTaxonomyController.curriculums | node-platform/apps/api/src/modules/subjects/subjects.controller.ts:42 |
| GET | /api/dashboard/teacher | TeacherDashboardController.overview | node-platform/apps/api/src/modules/dashboard/teacher-dashboard.controller.ts:17 |
| GET | /api/dashboard/teacher/operations | TeacherDashboardController.operations | node-platform/apps/api/src/modules/dashboard/teacher-dashboard.controller.ts:28 |
| GET | /api/documents | TeachingDocumentsController.list | node-platform/apps/api/src/modules/documents/documents.controller.ts:28 |
| POST | /api/documents | TeachingDocumentsController.create | node-platform/apps/api/src/modules/documents/documents.controller.ts:43 |
| DELETE | /api/documents/:id | TeachingDocumentsController.archive | node-platform/apps/api/src/modules/documents/documents.controller.ts:67 |
| GET | /api/documents/:id | TeachingDocumentsController.detail | node-platform/apps/api/src/modules/documents/documents.controller.ts:49 |
| PATCH | /api/documents/:id | TeachingDocumentsController.update | node-platform/apps/api/src/modules/documents/documents.controller.ts:61 |
| GET | /api/documents/:id/content | TeachingDocumentsController.content | node-platform/apps/api/src/modules/documents/documents.controller.ts:91 |
| POST | /api/documents/:id/purchase | TeachingDocumentsController.purchase | node-platform/apps/api/src/modules/documents/documents.controller.ts:55 |
| POST | /api/documents/:id/share | TeachingDocumentsController.share | node-platform/apps/api/src/modules/documents/documents.controller.ts:79 |
| DELETE | /api/documents/:id/share/:shareId | TeachingDocumentsController.removeShare | node-platform/apps/api/src/modules/documents/documents.controller.ts:85 |
| POST | /api/documents/:id/submit-review | TeachingDocumentsController.submitReview | node-platform/apps/api/src/modules/documents/documents.controller.ts:73 |
| GET | /api/documents/shared | TeachingDocumentsController.shared | node-platform/apps/api/src/modules/documents/documents.controller.ts:34 |
| GET | /api/education-levels | QuestionTaxonomyController.educationLevels | node-platform/apps/api/src/modules/subjects/subjects.controller.ts:30 |
| GET | /api/exam-blueprints | ExamBlueprintsController.list | node-platform/apps/api/src/modules/exam-blueprints/exam-blueprints.controller.ts:17 |
| POST | /api/exam-blueprints | ExamBlueprintsController.create | node-platform/apps/api/src/modules/exam-blueprints/exam-blueprints.controller.ts:31 |
| DELETE | /api/exam-blueprints/:id | ExamBlueprintsController.delete | node-platform/apps/api/src/modules/exam-blueprints/exam-blueprints.controller.ts:55 |
| GET | /api/exam-blueprints/:id | ExamBlueprintsController.detail | node-platform/apps/api/src/modules/exam-blueprints/exam-blueprints.controller.ts:24 |
| PATCH | /api/exam-blueprints/:id | ExamBlueprintsController.update | node-platform/apps/api/src/modules/exam-blueprints/exam-blueprints.controller.ts:47 |
| POST | /api/exam-blueprints/:id/preview | ExamBlueprintsController.preview | node-platform/apps/api/src/modules/exam-blueprints/exam-blueprints.controller.ts:63 |
| POST | /api/exam-blueprints/seed/core | ExamBlueprintsController.seedCore | node-platform/apps/api/src/modules/exam-blueprints/exam-blueprints.controller.ts:39 |
| GET | /api/exam-folders | ExamFoldersController.list | node-platform/apps/api/src/modules/exams/exams.controller.ts:411 |
| POST | /api/exam-folders | ExamFoldersController.create | node-platform/apps/api/src/modules/exams/exams.controller.ts:423 |
| DELETE | /api/exam-folders/:id | ExamFoldersController.remove | node-platform/apps/api/src/modules/exams/exams.controller.ts:449 |
| PATCH | /api/exam-folders/:id | ExamFoldersController.update | node-platform/apps/api/src/modules/exams/exams.controller.ts:436 |
| GET | /api/exam-import/algorithm-jobs | ExamImportController.listAlgorithmJobs | node-platform/apps/api/src/modules/exam-paper-templates/exam-paper-templates.controller.ts:702 |
| POST | /api/exam-import/algorithm-jobs | ExamImportController.createAlgorithmJob | node-platform/apps/api/src/modules/exam-paper-templates/exam-paper-templates.controller.ts:190 |
| GET | /api/exam-import/algorithm-jobs/events | ExamImportController.streamAlgorithmJobs | node-platform/apps/api/src/modules/exam-paper-templates/exam-paper-templates.controller.ts:780 |
| GET | /api/exam-import/docx-fast-conversions/:id/download | ExamImportController.downloadMathTypeConversionFile | node-platform/apps/api/src/modules/exam-paper-templates/exam-paper-templates.controller.ts:456 |
| POST | /api/exam-import/docx-fast-conversions/mathtype-to-equation | ExamImportController.convertMathTypeToWordEquation | node-platform/apps/api/src/modules/exam-paper-templates/exam-paper-templates.controller.ts:347 |
| POST | /api/exam-import/docx-fast-jobs | ExamImportController.createDocxFastJob | node-platform/apps/api/src/modules/exam-paper-templates/exam-paper-templates.controller.ts:210 |
| POST | /api/exam-import/docx-fast-jobs/:id/reprocess | ExamImportController.reprocessDocxFastJob | node-platform/apps/api/src/modules/exam-paper-templates/exam-paper-templates.controller.ts:1012 |
| GET | /api/exam-import/docx-fast-jobs/:id/temp-draft | ExamImportController.getDocxFastTempDraft | node-platform/apps/api/src/modules/exam-paper-templates/exam-paper-templates.controller.ts:609 |
| GET | /api/exam-import/docx-fast-jobs/:id/temp-draft/assets/:tempAssetId/content | ExamImportController.getDocxFastTempDraftAssetContent | node-platform/apps/api/src/modules/exam-paper-templates/exam-paper-templates.controller.ts:663 |
| POST | /api/exam-import/jobs | ExamImportController.createJob | node-platform/apps/api/src/modules/exam-paper-templates/exam-paper-templates.controller.ts:170 |
| DELETE | /api/exam-import/jobs/:id | ExamImportController.deleteJob | node-platform/apps/api/src/modules/exam-paper-templates/exam-paper-templates.controller.ts:997 |
| GET | /api/exam-import/jobs/:id | ExamImportController.detail | node-platform/apps/api/src/modules/exam-paper-templates/exam-paper-templates.controller.ts:880 |
| POST | /api/exam-import/jobs/:id/apply-formulas | FormulaRecognitionController.apply | node-platform/apps/api/src/modules/formula-recognition/formula-recognition.controller.ts:38 |
| POST | /api/exam-import/jobs/:id/approve | ExamImportController.approve | node-platform/apps/api/src/modules/exam-paper-templates/exam-paper-templates.controller.ts:967 |
| POST | /api/exam-import/jobs/:id/convert-formulas | ExamImportController.convertFormulas | node-platform/apps/api/src/modules/exam-paper-templates/exam-paper-templates.controller.ts:925 |
| GET | /api/exam-import/jobs/:id/formula-candidates | FormulaRecognitionController.list | node-platform/apps/api/src/modules/formula-recognition/formula-recognition.controller.ts:30 |
| POST | /api/exam-import/jobs/:id/formulas/ocr-one | ExamImportController.ocrFormula | node-platform/apps/api/src/modules/exam-paper-templates/exam-paper-templates.controller.ts:946 |
| PATCH | /api/exam-import/jobs/:id/metadata | ExamImportController.confirmMetadata | node-platform/apps/api/src/modules/exam-paper-templates/exam-paper-templates.controller.ts:325 |
| GET | /api/exam-import/jobs/:id/metadata-inference | ExamImportController.getMetadataInference | node-platform/apps/api/src/modules/exam-paper-templates/exam-paper-templates.controller.ts:310 |
| POST | /api/exam-import/jobs/:id/recognize-formulas | FormulaRecognitionController.recognize | node-platform/apps/api/src/modules/formula-recognition/formula-recognition.controller.ts:17 |
| GET | /api/exam-import/jobs/:id/redirect-detail | ExamImportController.redirectDetail | node-platform/apps/api/src/modules/exam-paper-templates/exam-paper-templates.controller.ts:867 |
| POST | /api/exam-import/jobs/:id/reject | ExamImportController.reject | node-platform/apps/api/src/modules/exam-paper-templates/exam-paper-templates.controller.ts:1042 |
| POST | /api/exam-import/jobs/:id/reprocess-media | ExamImportController.reprocessMedia | node-platform/apps/api/src/modules/exam-paper-templates/exam-paper-templates.controller.ts:1027 |
| PATCH | /api/exam-import/jobs/:id/review | ExamImportController.updateReview | node-platform/apps/api/src/modules/exam-paper-templates/exam-paper-templates.controller.ts:904 |
| GET | /api/exam-import/jobs/:id/status | ExamImportController.status | node-platform/apps/api/src/modules/exam-paper-templates/exam-paper-templates.controller.ts:891 |
| POST | /api/exam-import/jobs/:id/stop | ExamImportController.stop | node-platform/apps/api/src/modules/exam-paper-templates/exam-paper-templates.controller.ts:982 |
| GET | /api/exam-import/ocr-document-conversions/:id/download | ExamImportController.downloadDocumentOcrConversionFile | node-platform/apps/api/src/modules/exam-paper-templates/exam-paper-templates.controller.ts:546 |
| GET | /api/exam-import/ocr-document-conversions/:id/markdown | ExamImportController.downloadDocumentOcrMarkdownFile | node-platform/apps/api/src/modules/exam-paper-templates/exam-paper-templates.controller.ts:573 |
| POST | /api/exam-import/ocr-document-conversions/mistral-batch | ExamImportController.convertDocumentOcrToWordEquation | node-platform/apps/api/src/modules/exam-paper-templates/exam-paper-templates.controller.ts:485 |
| GET | /api/exam-import/teacher-library | ExamImportController.listTeacherLibrary | node-platform/apps/api/src/modules/exam-paper-templates/exam-paper-templates.controller.ts:746 |
| GET | /api/exam-links/:code | ExamLinksController.detail | node-platform/apps/api/src/modules/exams/exams.controller.ts:485 |
| POST | /api/exam-links/:code/guest-start | ExamLinksController.guestStart | node-platform/apps/api/src/modules/exams/exams.controller.ts:490 |
| POST | /api/exam-links/:code/register-and-start | ExamLinksController.registerAndStart | node-platform/apps/api/src/modules/exams/exams.controller.ts:508 |
| POST | /api/exam-links/:code/start | ExamLinksController.startAsLoggedInStudent | node-platform/apps/api/src/modules/exams/exams.controller.ts:527 |
| GET | /api/exam-paper-templates | ExamPaperTemplatesController.list | node-platform/apps/api/src/modules/exam-paper-templates/exam-paper-templates-template.controller.ts:29 |
| POST | /api/exam-paper-templates | ExamPaperTemplatesController.create | node-platform/apps/api/src/modules/exam-paper-templates/exam-paper-templates-template.controller.ts:50 |
| DELETE | /api/exam-paper-templates/:id | ExamPaperTemplatesController.delete | node-platform/apps/api/src/modules/exam-paper-templates/exam-paper-templates-template.controller.ts:81 |
| GET | /api/exam-paper-templates/:id | ExamPaperTemplatesController.detail | node-platform/apps/api/src/modules/exam-paper-templates/exam-paper-templates-template.controller.ts:39 |
| PATCH | /api/exam-paper-templates/:id | ExamPaperTemplatesController.update | node-platform/apps/api/src/modules/exam-paper-templates/exam-paper-templates-template.controller.ts:65 |
| POST | /api/exam-paper-templates/seed/core | ExamPaperTemplatesController.seedCore | node-platform/apps/api/src/modules/exam-paper-templates/exam-paper-templates-template.controller.ts:152 |
| POST | /api/exam-paper-templates/seed/dgnl-2026 | ExamPaperTemplatesController.seedDgnl | node-platform/apps/api/src/modules/exam-paper-templates/exam-paper-templates-template.controller.ts:138 |
| POST | /api/exam-paper-templates/seed/thpt-2026-math | ExamPaperTemplatesController.seed | node-platform/apps/api/src/modules/exam-paper-templates/exam-paper-templates-template.controller.ts:96 |
| POST | /api/exam-paper-templates/seed/thpt-english-2025 | ExamPaperTemplatesController.seedThptEnglish | node-platform/apps/api/src/modules/exam-paper-templates/exam-paper-templates-template.controller.ts:124 |
| POST | /api/exam-paper-templates/seed/thpt-math-2026 | ExamPaperTemplatesController.seedThptMath | node-platform/apps/api/src/modules/exam-paper-templates/exam-paper-templates-template.controller.ts:110 |
| GET | /api/exam-print-templates | ExamPrintTemplatesController.list | node-platform/apps/api/src/modules/exam-print-templates/exam-print-templates.controller.ts:20 |
| POST | /api/exam-print-templates | ExamPrintTemplatesController.create | node-platform/apps/api/src/modules/exam-print-templates/exam-print-templates.controller.ts:38 |
| DELETE | /api/exam-print-templates/:id | ExamPrintTemplatesController.remove | node-platform/apps/api/src/modules/exam-print-templates/exam-print-templates.controller.ts:81 |
| GET | /api/exam-print-templates/:id | ExamPrintTemplatesController.detail | node-platform/apps/api/src/modules/exam-print-templates/exam-print-templates.controller.ts:27 |
| PATCH | /api/exam-print-templates/:id | ExamPrintTemplatesController.update | node-platform/apps/api/src/modules/exam-print-templates/exam-print-templates.controller.ts:68 |
| POST | /api/exam-print-templates/export-docx | ExamPrintTemplatesController.exportDocx | node-platform/apps/api/src/modules/exam-print-templates/exam-print-templates.controller.ts:50 |
| PATCH | /api/exam-sections/:id | ExamSectionsController.update | node-platform/apps/api/src/modules/exams/exams.controller.ts:574 |
| GET | /api/exam-tracks | QuestionTaxonomyController.examTracks | node-platform/apps/api/src/modules/subjects/subjects.controller.ts:61 |
| GET | /api/exams | ExamsController.list | node-platform/apps/api/src/modules/exams/exams.controller.ts:34 |
| POST | /api/exams | ExamsController.create | node-platform/apps/api/src/modules/exams/exams.controller.ts:121 |
| POST | /api/exams/:examId/start | ExamsController.start | node-platform/apps/api/src/modules/exams/exams.controller.ts:315 |
| DELETE | /api/exams/:id | ExamsController.remove | node-platform/apps/api/src/modules/exams/exams.controller.ts:137 |
| GET | /api/exams/:id | ExamsController.detail | node-platform/apps/api/src/modules/exams/exams.controller.ts:80 |
| PATCH | /api/exams/:id | ExamsController.update | node-platform/apps/api/src/modules/exams/exams.controller.ts:129 |
| GET | /api/exams/:id/analytics | AnalyticsController.examAnalytics | node-platform/apps/api/src/modules/analytics/analytics.controller.ts:94 |
| POST | /api/exams/:id/assign | ExamsController.assign | node-platform/apps/api/src/modules/exams/exams.controller.ts:211 |
| GET | /api/exams/:id/events | ExamsController.events | node-platform/apps/api/src/modules/exams/exams.controller.ts:397 |
| POST | /api/exams/:id/generate-from-bank | ExamsController.generate | node-platform/apps/api/src/modules/exams/exams.controller.ts:245 |
| GET | /api/exams/:id/leaderboard | ExamsController.leaderboard | node-platform/apps/api/src/modules/exams/exams.controller.ts:198 |
| GET | /api/exams/:id/paper-export | ExamsController.exportPaper | node-platform/apps/api/src/modules/exams/exams.controller.ts:351 |
| POST | /api/exams/:id/publish | ExamsController.publish | node-platform/apps/api/src/modules/exams/exams.controller.ts:190 |
| POST | /api/exams/:id/questions | ExamsController.addQuestion | node-platform/apps/api/src/modules/exams/exams.controller.ts:145 |
| DELETE | /api/exams/:id/questions/:questionId | ExamsController.removeQuestion | node-platform/apps/api/src/modules/exams/exams.controller.ts:182 |
| POST | /api/exams/:id/questions/:questionId/refresh-snapshot | ExamsController.refreshQuestionSnapshot | node-platform/apps/api/src/modules/exams/exams.controller.ts:169 |
| POST | /api/exams/:id/questions/reorder | ExamsController.reorderQuestions | node-platform/apps/api/src/modules/exams/exams.controller.ts:153 |
| POST | /api/exams/:id/release-results | ExamsController.releaseResults | node-platform/apps/api/src/modules/exams/exams.controller.ts:237 |
| GET | /api/exams/:id/results | AnalyticsController.examResults | node-platform/apps/api/src/modules/analytics/analytics.controller.ts:86 |
| GET | /api/exams/:id/results/export | ExamsController.exportResults | node-platform/apps/api/src/modules/exams/exams.controller.ts:322 |
| GET | /api/exams/:id/sections | ExamsController.sections | node-platform/apps/api/src/modules/exams/exams.controller.ts:105 |
| POST | /api/exams/:id/sections | ExamsController.createSection | node-platform/apps/api/src/modules/exams/exams.controller.ts:113 |
| POST | /api/exams/:id/share-links | ExamsController.shareLink | node-platform/apps/api/src/modules/exams/exams.controller.ts:224 |
| POST | /api/exams/from-template | ExamsController.createFromTemplate | node-platform/apps/api/src/modules/exams/exams.controller.ts:93 |
| POST | /api/exams/generate-from-blueprint | ExamsController.generateFromBlueprint | node-platform/apps/api/src/modules/exams/exams.controller.ts:264 |
| POST | /api/exams/generate-from-blueprint-ai | ExamsController.generateFromBlueprintWithAI | node-platform/apps/api/src/modules/exams/exams.controller.ts:277 |
| GET | /api/exams/generation-runs | ExamsController.listGenerationRuns | node-platform/apps/api/src/modules/exams/exams.controller.ts:58 |
| GET | /api/exams/generation-runs/:id | ExamsController.getGenerationRun | node-platform/apps/api/src/modules/exams/exams.controller.ts:66 |
| POST | /api/exams/matrix-paper-export | ExamsController.exportMatrixPapers | node-platform/apps/api/src/modules/exams/exams.controller.ts:294 |
| GET | /api/exams/share-targets/classrooms | ExamsController.shareTargetClassrooms | node-platform/apps/api/src/modules/exams/exams.controller.ts:50 |
| GET | /api/feature-maintenance/public | FeatureMaintenancePublicController.publicStatus | node-platform/apps/api/src/modules/admin/feature-maintenance.controller.ts:15 |
| PATCH | /api/formula-candidates/:id | FormulaRecognitionController.update | node-platform/apps/api/src/modules/formula-recognition/formula-recognition.controller.ts:46 |
| POST | /api/formula-candidates/:id/accept | FormulaRecognitionController.accept | node-platform/apps/api/src/modules/formula-recognition/formula-recognition.controller.ts:54 |
| POST | /api/formula-candidates/:id/reject | FormulaRecognitionController.reject | node-platform/apps/api/src/modules/formula-recognition/formula-recognition.controller.ts:62 |
| GET | /api/grades | QuestionTaxonomyController.grades | node-platform/apps/api/src/modules/subjects/subjects.controller.ts:36 |
| GET | /api/health/live | HealthController.live | node-platform/apps/api/src/modules/health/health.controller.ts:15 |
| GET | /api/health/ready | HealthController.ready | node-platform/apps/api/src/modules/health/health.controller.ts:25 |
| POST | /api/hooks/sepay-payment | WalletHooksController.sepayPayment | node-platform/apps/api/src/modules/wallet/wallet.controller.ts:122 |
| GET | /api/imports/:jobId/status | ImportsController.status | node-platform/apps/api/src/modules/exam-paper-templates/exam-import-status.controller.ts:18 |
| GET | /api/metrics | HealthController.metrics | node-platform/apps/api/src/modules/health/health.controller.ts:37 |
| GET | /api/notifications | NotificationsController.list | node-platform/apps/api/src/modules/notifications/notifications.controller.ts:15 |
| POST | /api/notifications/:id/delete | NotificationsController.deleteOne | node-platform/apps/api/src/modules/notifications/notifications.controller.ts:51 |
| POST | /api/notifications/:id/read | NotificationsController.read | node-platform/apps/api/src/modules/notifications/notifications.controller.ts:34 |
| POST | /api/notifications/delete-all | NotificationsController.deleteAll | node-platform/apps/api/src/modules/notifications/notifications.controller.ts:61 |
| POST | /api/notifications/read-all | NotificationsController.readAll | node-platform/apps/api/src/modules/notifications/notifications.controller.ts:41 |
| GET | /api/organizations | OrganizationsController.list | node-platform/apps/api/src/modules/organizations/organizations.controller.ts:26 |
| POST | /api/organizations | OrganizationsController.create | node-platform/apps/api/src/modules/organizations/organizations.controller.ts:47 |
| DELETE | /api/organizations/:id | OrganizationsController.archive | node-platform/apps/api/src/modules/organizations/organizations.controller.ts:87 |
| GET | /api/organizations/:id | OrganizationsController.detail | node-platform/apps/api/src/modules/organizations/organizations.controller.ts:55 |
| PATCH | /api/organizations/:id | OrganizationsController.update | node-platform/apps/api/src/modules/organizations/organizations.controller.ts:63 |
| GET | /api/organizations/:id/members | OrganizationsController.members | node-platform/apps/api/src/modules/organizations/organizations.controller.ts:105 |
| POST | /api/organizations/:id/members | OrganizationsController.addMember | node-platform/apps/api/src/modules/organizations/organizations.controller.ts:113 |
| DELETE | /api/organizations/:id/members/:userId | OrganizationsController.removeMember | node-platform/apps/api/src/modules/organizations/organizations.controller.ts:189 |
| PATCH | /api/organizations/:id/members/:userId | OrganizationsController.updateMember | node-platform/apps/api/src/modules/organizations/organizations.controller.ts:176 |
| DELETE | /api/organizations/:id/purge | OrganizationsController.purge | node-platform/apps/api/src/modules/organizations/organizations.controller.ts:95 |
| POST | /api/organizations/:id/student-imports | OrganizationsController.createStudentImport | node-platform/apps/api/src/modules/organizations/organizations.controller.ts:201 |
| GET | /api/organizations/:id/units | OrganizationsController.units | node-platform/apps/api/src/modules/organizations/organizations.controller.ts:131 |
| POST | /api/organizations/:id/units | OrganizationsController.createUnit | node-platform/apps/api/src/modules/organizations/organizations.controller.ts:139 |
| DELETE | /api/organizations/:id/units/:unitId | OrganizationsController.deleteUnit | node-platform/apps/api/src/modules/organizations/organizations.controller.ts:164 |
| PATCH | /api/organizations/:id/units/:unitId | OrganizationsController.updateUnit | node-platform/apps/api/src/modules/organizations/organizations.controller.ts:151 |
| GET | /api/parent/alerts | ParentAlertsController.list | node-platform/apps/api/src/modules/notifications/notifications.controller.ts:77 |
| POST | /api/parent/alerts/:id/read | ParentAlertsController.read | node-platform/apps/api/src/modules/notifications/notifications.controller.ts:85 |
| POST | /api/parent/alerts/read-all | ParentAlertsController.readAll | node-platform/apps/api/src/modules/notifications/notifications.controller.ts:93 |
| GET | /api/parents/children | AnalyticsController.parentChildren | node-platform/apps/api/src/modules/analytics/analytics.controller.ts:136 |
| GET | /api/parents/children/:studentId/progress | AnalyticsController.parentProgress | node-platform/apps/api/src/modules/analytics/analytics.controller.ts:144 |
| POST | /api/progress/lessons | ProgressController.lesson | node-platform/apps/api/src/modules/progress/progress.controller.ts:16 |
| POST | /api/progress/materials | ProgressController.material | node-platform/apps/api/src/modules/progress/progress.controller.ts:39 |
| POST | /api/progress/videos | ProgressController.video | node-platform/apps/api/src/modules/progress/progress.controller.ts:28 |
| GET | /api/public/catalog | PublicCatalogController.catalog | node-platform/apps/api/src/modules/public/public-catalog.controller.ts:84 |
| GET | /api/public/catalog/:type/:slug | PublicCatalogController.detail | node-platform/apps/api/src/modules/public/public-catalog.controller.ts:131 |
| GET | /api/public/documents/:slug/content | PublicCatalogController.documentContent | node-platform/apps/api/src/modules/public/public-catalog.controller.ts:149 |
| GET | /api/public/home | PublicCatalogController.home | node-platform/apps/api/src/modules/public/public-catalog.controller.ts:65 |
| GET | /api/public/lessons/:slug/video | PublicCatalogController.lessonVideo | node-platform/apps/api/src/modules/public/public-catalog.controller.ts:155 |
| GET | /api/public/materials/:slug/content | PublicCatalogController.materialContent | node-platform/apps/api/src/modules/public/public-catalog.controller.ts:143 |
| GET | /api/question-sources | QuestionTaxonomyController.questionSources | node-platform/apps/api/src/modules/subjects/subjects.controller.ts:67 |
| GET | /api/question-taxonomy/options | QuestionTaxonomyController.options | node-platform/apps/api/src/modules/subjects/subjects.controller.ts:73 |
| GET | /api/questions | QuestionsController.list | node-platform/apps/api/src/modules/questions/questions.controller.ts:81 |
| POST | /api/questions | QuestionsController.create | node-platform/apps/api/src/modules/questions/questions.controller.ts:1017 |
| DELETE | /api/questions/:id | QuestionsController.remove | node-platform/apps/api/src/modules/questions/questions.controller.ts:1048 |
| GET | /api/questions/:id | QuestionsController.detail | node-platform/apps/api/src/modules/questions/questions.controller.ts:1000 |
| PATCH | /api/questions/:id | QuestionsController.update | node-platform/apps/api/src/modules/questions/questions.controller.ts:1032 |
| PATCH | /api/questions/ai-classify/apply | QuestionsController.applyClassification | node-platform/apps/api/src/modules/questions/questions.controller.ts:822 |
| GET | /api/questions/ai-classify/jobs | QuestionsController.listClassificationJobs | node-platform/apps/api/src/modules/questions/questions.controller.ts:683 |
| POST | /api/questions/ai-classify/jobs | QuestionsController.createClassificationJob | node-platform/apps/api/src/modules/questions/questions.controller.ts:668 |
| GET | /api/questions/ai-classify/jobs/:id | QuestionsController.getClassificationJob | node-platform/apps/api/src/modules/questions/questions.controller.ts:703 |
| POST | /api/questions/ai-classify/jobs/:id/cancel | QuestionsController.cancelClassificationJob | node-platform/apps/api/src/modules/questions/questions.controller.ts:807 |
| GET | /api/questions/ai-classify/jobs/:id/errors | QuestionsController.getClassificationJobErrors | node-platform/apps/api/src/modules/questions/questions.controller.ts:717 |
| GET | /api/questions/ai-classify/jobs/:id/events | QuestionsController.streamClassificationJob | node-platform/apps/api/src/modules/questions/questions.controller.ts:740 |
| POST | /api/questions/ai-classify/suggestions | QuestionsController.classifySuggestions | node-platform/apps/api/src/modules/questions/questions.controller.ts:649 |
| POST | /api/questions/ai-generation/document-preview | QuestionsController.previewGenerationDocument | node-platform/apps/api/src/modules/questions/questions.controller.ts:558 |
| POST | /api/questions/ai-generation/generate | QuestionsController.generateSimilarQuestions | node-platform/apps/api/src/modules/questions/questions.controller.ts:577 |
| POST | /api/questions/ai-solutions/apply | QuestionsController.applySolutions | node-platform/apps/api/src/modules/questions/questions.controller.ts:598 |
| POST | /api/questions/ai-solutions/document-preview | QuestionsController.previewSolutionDocument | node-platform/apps/api/src/modules/questions/questions.controller.ts:528 |
| POST | /api/questions/ai-solutions/editor | QuestionsController.generateEditorSolution | node-platform/apps/api/src/modules/questions/questions.controller.ts:493 |
| POST | /api/questions/ai-solutions/export | QuestionsController.exportSolutions | node-platform/apps/api/src/modules/questions/questions.controller.ts:613 |
| POST | /api/questions/ai-solutions/from-document | QuestionsController.generateDocumentSolutions | node-platform/apps/api/src/modules/questions/questions.controller.ts:513 |
| POST | /api/questions/ai-solutions/from-items | QuestionsController.generateItemSolutions | node-platform/apps/api/src/modules/questions/questions.controller.ts:543 |
| POST | /api/questions/ai-solutions/generate | QuestionsController.generateSolutions | node-platform/apps/api/src/modules/questions/questions.controller.ts:434 |
| GET | /api/questions/ai-solutions/history | QuestionsController.listSolutionHistory | node-platform/apps/api/src/modules/questions/questions.controller.ts:449 |
| GET | /api/questions/ai-solutions/history/:id/download | QuestionsController.downloadSolutionHistory | node-platform/apps/api/src/modules/questions/questions.controller.ts:468 |
| POST | /api/questions/bulk-delete | QuestionsController.bulkDelete | node-platform/apps/api/src/modules/questions/questions.controller.ts:170 |
| PATCH | /api/questions/bulk-status | QuestionsController.bulkStatus | node-platform/apps/api/src/modules/questions/questions.controller.ts:150 |
| GET | /api/questions/duplicates | QuestionsController.duplicates | node-platform/apps/api/src/modules/questions/questions.controller.ts:837 |
| POST | /api/questions/duplicates/jobs | QuestionsController.createDuplicateResolutionJob | node-platform/apps/api/src/modules/questions/questions.controller.ts:848 |
| GET | /api/questions/duplicates/jobs/:id | QuestionsController.getDuplicateResolutionJob | node-platform/apps/api/src/modules/questions/questions.controller.ts:867 |
| POST | /api/questions/duplicates/jobs/:id/cancel | QuestionsController.cancelDuplicateResolutionJob | node-platform/apps/api/src/modules/questions/questions.controller.ts:952 |
| GET | /api/questions/duplicates/jobs/:id/events | QuestionsController.streamDuplicateResolutionJob | node-platform/apps/api/src/modules/questions/questions.controller.ts:885 |
| POST | /api/questions/duplicates/resolve | QuestionsController.resolveDuplicates | node-platform/apps/api/src/modules/questions/questions.controller.ts:971 |
| POST | /api/questions/duplicates/resolve-all | QuestionsController.resolveAllDuplicates | node-platform/apps/api/src/modules/questions/questions.controller.ts:986 |
| POST | /api/questions/outline-export | QuestionsController.exportOutline | node-platform/apps/api/src/modules/questions/questions.controller.ts:341 |
| POST | /api/questions/outline-export/by-topic | QuestionsController.exportOutlineByTopic | node-platform/apps/api/src/modules/questions/questions.controller.ts:374 |
| POST | /api/questions/outline-preview | QuestionsController.previewOutline | node-platform/apps/api/src/modules/questions/questions.controller.ts:407 |
| POST | /api/questions/permanent-delete | QuestionsController.permanentDelete | node-platform/apps/api/src/modules/questions/questions.controller.ts:207 |
| POST | /api/questions/permanent-delete-impact | QuestionsController.permanentDeleteImpact | node-platform/apps/api/src/modules/questions/questions.controller.ts:185 |
| POST | /api/questions/permanent-delete/jobs | QuestionsController.createPermanentDeleteJob | node-platform/apps/api/src/modules/questions/questions.controller.ts:222 |
| GET | /api/questions/permanent-delete/jobs/:id | QuestionsController.getPermanentDeleteJob | node-platform/apps/api/src/modules/questions/questions.controller.ts:241 |
| POST | /api/questions/permanent-delete/jobs/:id/cancel | QuestionsController.cancelPermanentDeleteJob | node-platform/apps/api/src/modules/questions/questions.controller.ts:322 |
| GET | /api/questions/permanent-delete/jobs/:id/events | QuestionsController.streamPermanentDeleteJob | node-platform/apps/api/src/modules/questions/questions.controller.ts:255 |
| POST | /api/storage/media-assets | StorageController.mediaAsset | node-platform/apps/api/src/modules/storage/storage.controller.ts:70 |
| GET | /api/storage/media-assets/:id | StorageController.mediaAssetDetail | node-platform/apps/api/src/modules/storage/storage.controller.ts:92 |
| GET | /api/storage/media-assets/:id/content | StorageController.mediaAssetContent | node-platform/apps/api/src/modules/storage/storage.controller.ts:99 |
| POST | /api/storage/presigned-upload | StorageController.presigned | node-platform/apps/api/src/modules/storage/storage.controller.ts:44 |
| GET | /api/student-imports/:id | StudentImportsController.detail | node-platform/apps/api/src/modules/student-imports/student-imports.controller.ts:15 |
| POST | /api/student-imports/:id/commit | StudentImportsController.commit | node-platform/apps/api/src/modules/student-imports/student-imports.controller.ts:23 |
| GET | /api/student/attempts | StudentExamController.attemptsForStudent | node-platform/apps/api/src/modules/exams/exams.controller.ts:560 |
| GET | /api/student/courses | StudentCoursesController.list | node-platform/apps/api/src/modules/courses/courses.controller.ts:343 |
| GET | /api/student/courses/:id | StudentCoursesController.detail | node-platform/apps/api/src/modules/courses/courses.controller.ts:348 |
| POST | /api/student/courses/:id/lessons/:lessonId/progress | StudentCoursesController.lessonProgress | node-platform/apps/api/src/modules/courses/courses.controller.ts:368 |
| POST | /api/student/courses/:id/lessons/:lessonId/video-progress | StudentCoursesController.videoProgress | node-platform/apps/api/src/modules/courses/courses.controller.ts:379 |
| GET | /api/student/courses/:id/mastery | StudentCoursesController.mastery | node-platform/apps/api/src/modules/courses/courses.controller.ts:353 |
| POST | /api/student/courses/:id/materials/:materialId/view | StudentCoursesController.materialView | node-platform/apps/api/src/modules/courses/courses.controller.ts:390 |
| POST | /api/student/courses/:id/purchase | StudentCoursesController.purchase | node-platform/apps/api/src/modules/courses/courses.controller.ts:363 |
| GET | /api/student/courses/:id/recommendation | StudentCoursesController.recommendation | node-platform/apps/api/src/modules/courses/courses.controller.ts:358 |
| GET | /api/student/exams | StudentExamController.examsForStudent | node-platform/apps/api/src/modules/exams/exams.controller.ts:552 |
| GET | /api/students/:id/progress | AnalyticsController.studentProgress | node-platform/apps/api/src/modules/analytics/analytics.controller.ts:129 |
| GET | /api/subjects | SubjectsController.list | node-platform/apps/api/src/modules/subjects/subjects.controller.ts:14 |
| GET | /api/subjects/:subjectId/chapters | SubjectsController.chapters | node-platform/apps/api/src/modules/subjects/subjects.controller.ts:19 |
| GET | /api/support/tickets | SupportTicketsController.list | node-platform/apps/api/src/modules/support/support.controller.ts:19 |
| POST | /api/support/tickets | SupportTicketsController.create | node-platform/apps/api/src/modules/support/support.controller.ts:40 |
| GET | /api/support/tickets/:id | SupportTicketsController.detail | node-platform/apps/api/src/modules/support/support.controller.ts:56 |
| PATCH | /api/support/tickets/:id | SupportTicketsController.update | node-platform/apps/api/src/modules/support/support.controller.ts:76 |
| POST | /api/support/tickets/:id/messages | SupportTicketsController.message | node-platform/apps/api/src/modules/support/support.controller.ts:61 |
| GET | /api/taxonomy/:resource | TaxonomyConfigController.list | node-platform/apps/api/src/modules/taxonomy-config/taxonomy-config.controller.ts:17 |
| POST | /api/taxonomy/:resource | TaxonomyConfigController.create | node-platform/apps/api/src/modules/taxonomy-config/taxonomy-config.controller.ts:47 |
| DELETE | /api/taxonomy/:resource/:id | TaxonomyConfigController.remove | node-platform/apps/api/src/modules/taxonomy-config/taxonomy-config.controller.ts:59 |
| PATCH | /api/taxonomy/:resource/:id | TaxonomyConfigController.update | node-platform/apps/api/src/modules/taxonomy-config/taxonomy-config.controller.ts:53 |
| GET | /api/wallet | WalletController.overview | node-platform/apps/api/src/modules/wallet/wallet.controller.ts:21 |
| GET | /api/wallet/az-credit | AzCreditWalletController.overview | node-platform/apps/api/src/modules/wallet/az-credit.controller.ts:25 |
| POST | /api/wallet/az-credit/subscription-requests | AzCreditWalletController.requestSubscription | node-platform/apps/api/src/modules/wallet/az-credit.controller.ts:30 |
| POST | /api/wallet/az-credit/subscription-requests/:id/cancel | AzCreditWalletController.cancelSubscriptionRequest | node-platform/apps/api/src/modules/wallet/az-credit.controller.ts:35 |
| GET | /api/wallet/az-credit/usage-history | AzCreditWalletController.usageHistory | node-platform/apps/api/src/modules/wallet/az-credit.controller.ts:20 |
| GET | /api/wallet/ledger | WalletController.ledger | node-platform/apps/api/src/modules/wallet/wallet.controller.ts:29 |
| POST | /api/wallet/topups | WalletController.createTopUp | node-platform/apps/api/src/modules/wallet/wallet.controller.ts:37 |
| GET | /api/wallet/topups/:id | WalletController.getTopUp | node-platform/apps/api/src/modules/wallet/wallet.controller.ts:45 |
| POST | /api/wallet/topups/:id/cancel | WalletController.cancelTopUp | node-platform/apps/api/src/modules/wallet/wallet.controller.ts:61 |
| POST | /api/wallet/topups/:id/mark-transferred | WalletController.markTopUpTransferred | node-platform/apps/api/src/modules/wallet/wallet.controller.ts:53 |
| POST | /api/wallet/webhooks/sepay | WalletWebhookController.sepay | node-platform/apps/api/src/modules/wallet/wallet.controller.ts:102 |
| GET | /api/wallet/withdrawals | WalletController.withdrawals | node-platform/apps/api/src/modules/wallet/wallet.controller.ts:69 |
| POST | /api/wallet/withdrawals | WalletController.createWithdrawal | node-platform/apps/api/src/modules/wallet/wallet.controller.ts:77 |
| POST | /api/wallet/withdrawals/:id/cancel | WalletController.cancelWithdrawal | node-platform/apps/api/src/modules/wallet/wallet.controller.ts:85 |