API endpoint index

Trang này là catalog endpoint sinh từ annotation controller trong backend/src/main/java/com/example/lms. Nó thay cho bản danh sách thủ công trước đây, vốn chỉ ghi các endpoint quan trọng nên chưa đủ để tra cứu toàn hệ thống.

  • Sinh lúc: 2026-06-14T09:23:34.570Z
  • Controller có endpoint: 72
  • Endpoint được phát hiện: 412
  • Endpoint có khả năng mutate dữ liệu: 205

Catalog này dùng để học codebase và tìm controller nhanh. Khi cần request/response DTO chính xác, hãy mở controller tương ứng hoặc Swagger runtime tại http://localhost:8088/swagger-ui khi backend đang chạy.

Cách đọc nhanh

  • GET, HEAD, OPTIONS thường là đọc dữ liệu hoặc probe.
  • POST, PUT, PATCH, DELETE là nhóm cần kiểm authorization, validation, audit và transaction.
  • Với Wiii/Pointy, không tự động gọi các endpoint nguy hiểm như submit quiz, publish/approve course, enroll, grade, refund/payment hoặc delete. UI phải có preview/diff và người dùng xác nhận.
  • Cột Source cho biết file và dòng annotation mapping để mở đúng chỗ trong IDE.

Tổng quan

Nhóm Số endpoint
AI assistant và Wiii token 13
Assessment 88
Communication 18
Competency mapping 6
Course authoring 76
Identity, auth và user 50
Learning delivery 90
Shared infrastructure 71

Theo HTTP method

Method Số endpoint
DELETE 35
GET 206
HEAD 1
PATCH 19
POST 119
PUT 32

Endpoint cần review kỹ khi demo hoặc tích hợp Wiii

Đây không phải blacklist đầy đủ, mà là danh sách nổi bật để nhớ nguyên tắc an toàn. Hễ endpoint mutate dữ liệu thì phải đi qua quyền backend và UI xác nhận rõ ràng.

Method Endpoint Handler Source
DELETE /api/v3/ai/sessions/{sessionId} deleteSession backend/src/main/java/com/example/lms/ai_assistant/infrastructure/web/AiAssistantControllerV3.java:138
DELETE /api/v3/teacher/assignments/{id} deleteAssignment backend/src/main/java/com/example/lms/assessment/infrastructure/web/AssignmentControllerV3.java:214
DELETE /api/v3/teacher/assignments/{id}/instruction-attachments/{attachmentId} deleteInstructionAttachment backend/src/main/java/com/example/lms/assessment/infrastructure/web/AssignmentControllerV3.java:255
PUT /api/v3/assignments/{assignmentId}/publish publishAssignment backend/src/main/java/com/example/lms/assessment/infrastructure/web/AssignmentSubmissionControllerV3.java:353
POST /api/v3/assignments/{assignmentId}/submissions submitAssignment backend/src/main/java/com/example/lms/assessment/infrastructure/web/AssignmentSubmissionControllerV3.java:233
PATCH /api/v3/assignments/{assignmentId}/submissions/batch-grade batchGrade backend/src/main/java/com/example/lms/assessment/infrastructure/web/AssignmentSubmissionControllerV3.java:159
PATCH /api/v3/submissions/{submissionId}/grade gradeSubmission backend/src/main/java/com/example/lms/assessment/infrastructure/web/AssignmentSubmissionControllerV3.java:131
POST /api/v3/question-banks/{bankId}/import importQuestions backend/src/main/java/com/example/lms/assessment/infrastructure/web/QuestionBankControllerV3.java:321
POST /api/v3/questions/import/excel importFromExcel backend/src/main/java/com/example/lms/assessment/infrastructure/web/QuestionControllerV3.java:330
DELETE /api/v3/quizzes/{quizId} deleteQuiz backend/src/main/java/com/example/lms/assessment/infrastructure/web/QuizControllerV3.java:456
POST /api/v3/quizzes/{quizId}/publish publishQuiz backend/src/main/java/com/example/lms/assessment/infrastructure/web/QuizControllerV3.java:440
DELETE /api/v3/quizzes/attempts/{attemptId} deleteAttempt backend/src/main/java/com/example/lms/assessment/infrastructure/web/QuizControllerV3.java:654
PATCH /api/v3/quizzes/attempts/{attemptId}/grade manualGradeQuestion backend/src/main/java/com/example/lms/assessment/infrastructure/web/QuizControllerV3.java:640
POST /api/v3/quizzes/attempts/{attemptId}/submit submitAttempt backend/src/main/java/com/example/lms/assessment/infrastructure/web/QuizControllerV3.java:567
POST /api/v3/quizzes/lessons/{lessonId}/sections/{sectionId}/submit submitSectionQuiz backend/src/main/java/com/example/lms/assessment/infrastructure/web/QuizControllerV3.java:295
POST /api/v3/questions/import/docx/confirm confirmDocxImport backend/src/main/java/com/example/lms/assessment/infrastructure/web/QuestionControllerV3.java:538
POST /api/v3/questions/import/docx/preview previewDocx backend/src/main/java/com/example/lms/assessment/infrastructure/web/QuestionControllerV3.java:453
DELETE /api/v3/question-banks/categories/{catId} deleteCategory backend/src/main/java/com/example/lms/assessment/infrastructure/web/QuestionBankControllerV3.java:185
DELETE /api/v3/rubrics/{id} deleteRubric backend/src/main/java/com/example/lms/assessment/infrastructure/web/RubricControllerV3.java:90
POST /api/v3/student/assignments/{id}/submit submitAssignment backend/src/main/java/com/example/lms/assessment/infrastructure/web/StudentAssignmentControllerV3.java:70
DELETE /api/v3/questions/{id} deleteQuestion backend/src/main/java/com/example/lms/assessment/infrastructure/web/QuestionControllerV3.java:141
DELETE /api/v3/announcements/{id} deleteAnnouncement backend/src/main/java/com/example/lms/communication/infrastructure/web/AnnouncementController.java:104
DELETE /api/v3/admin/courses/{courseId} deleteCourse backend/src/main/java/com/example/lms/course_authoring/infrastructure/web/AdminCoursesControllerV3.java:448
PATCH /api/v3/admin/courses/{courseId}/approve approveCourse backend/src/main/java/com/example/lms/course_authoring/infrastructure/web/AdminCoursesControllerV3.java:277
PATCH /api/v3/admin/courses/bulk-approve bulkApproveCourses backend/src/main/java/com/example/lms/course_authoring/infrastructure/web/AdminCoursesControllerV3.java:366
DELETE /api/v3/courses/chapters/{chapterId} deleteChapter backend/src/main/java/com/example/lms/course_authoring/infrastructure/web/CourseAuthoringControllerV3.java:135
DELETE /api/v3/courses/lessons/{lessonId} deleteLesson backend/src/main/java/com/example/lms/course_authoring/infrastructure/web/CourseAuthoringControllerV3.java:176
DELETE /api/v3/courses/lessons/{lessonId}/sections/{sectionId} deleteSection backend/src/main/java/com/example/lms/course_authoring/infrastructure/web/CourseAuthoringControllerV3.java:425
POST /api/v3/courses/{courseId}/reviews submitReview backend/src/main/java/com/example/lms/course_authoring/infrastructure/web/CourseReviewControllerV3.java:32
DELETE /api/v3/courses/{courseId}/reviews/{reviewId} deleteReview backend/src/main/java/com/example/lms/course_authoring/infrastructure/web/CourseReviewControllerV3.java:94
DELETE /api/v3/admin/course-tags/{id} delete backend/src/main/java/com/example/lms/course_authoring/infrastructure/web/CourseTagControllerV3.java:66
DELETE /api/v3/packages/{id} deletePackage backend/src/main/java/com/example/lms/course_authoring/infrastructure/web/PackageControllerV3.java:128
POST /api/v3/teacher/courses/{courseId}/publications/{publicationId}/adopt-all bulkAdoptPublication backend/src/main/java/com/example/lms/course_authoring/infrastructure/web/TeacherCoursesControllerV3.java:400
DELETE /api/v3/teacher/courses/{courseId} deleteCourse backend/src/main/java/com/example/lms/course_authoring/infrastructure/web/TeacherCoursesControllerV3.java:187
POST /api/v3/teacher/courses/{courseId}/submit-for-approval submitForApproval backend/src/main/java/com/example/lms/course_authoring/infrastructure/web/TeacherCoursesControllerV3.java:197
DELETE /api/v3/users/{userId} deleteUser backend/src/main/java/com/example/lms/identity/infrastructure/web/UserControllerV3.java:569
POST /api/v3/users/bulk-import bulkImportUsers backend/src/main/java/com/example/lms/identity/infrastructure/web/UserControllerV3.java:402
POST /api/v3/classes/{classId}/enroll-paid enrollPaidStudents backend/src/main/java/com/example/lms/learning_delivery/infrastructure/web/ClassControllerV3.java:513
POST /api/v3/classes/{classId}/adopt-publication adoptPublication backend/src/main/java/com/example/lms/learning_delivery/infrastructure/web/ClassControllerV3.java:341
DELETE /api/v3/classes/{classId} deleteClass backend/src/main/java/com/example/lms/learning_delivery/infrastructure/web/ClassControllerV3.java:314

Catalog đầy đủ theo module

AI assistant và Wiii token (13)

AiAssistantControllerV3 - 12 endpoint | Method | Endpoint | Handler | Source | | --- | --- | --- | --- | | `POST` | `/api/v3/ai/chat` | `quickChat` | `backend/src/main/java/com/example/lms/ai_assistant/infrastructure/web/AiAssistantControllerV3.java:215` | | `POST` | `/api/v3/ai/chat/stream` | `streamChat` | `backend/src/main/java/com/example/lms/ai_assistant/infrastructure/web/AiAssistantControllerV3.java:235` | | `POST` | `/api/v3/ai/courses/{courseId}/ask` | `askAboutCourse` | `backend/src/main/java/com/example/lms/ai_assistant/infrastructure/web/AiAssistantControllerV3.java:255` | | `GET` | `/api/v3/ai/health` | `healthCheck` | `backend/src/main/java/com/example/lms/ai_assistant/infrastructure/web/AiAssistantControllerV3.java:61` | | `POST` | `/api/v3/ai/lessons/{lessonId}/explain` | `explainLesson` | `backend/src/main/java/com/example/lms/ai_assistant/infrastructure/web/AiAssistantControllerV3.java:277` | | `GET` | `/api/v3/ai/sessions` | `getUserSessions` | `backend/src/main/java/com/example/lms/ai_assistant/infrastructure/web/AiAssistantControllerV3.java:106` | | `POST` | `/api/v3/ai/sessions` | `createSession` | `backend/src/main/java/com/example/lms/ai_assistant/infrastructure/web/AiAssistantControllerV3.java:94` | | `DELETE` | `/api/v3/ai/sessions/{sessionId}` | `deleteSession` | `backend/src/main/java/com/example/lms/ai_assistant/infrastructure/web/AiAssistantControllerV3.java:138` | | `GET` | `/api/v3/ai/sessions/{sessionId}` | `getSession` | `backend/src/main/java/com/example/lms/ai_assistant/infrastructure/web/AiAssistantControllerV3.java:115` | | `PUT` | `/api/v3/ai/sessions/{sessionId}/archive` | `archiveSession` | `backend/src/main/java/com/example/lms/ai_assistant/infrastructure/web/AiAssistantControllerV3.java:126` | | `GET` | `/api/v3/ai/sessions/{sessionId}/messages` | `getSessionMessages` | `backend/src/main/java/com/example/lms/ai_assistant/infrastructure/web/AiAssistantControllerV3.java:193` | | `POST` | `/api/v3/ai/sessions/{sessionId}/messages` | `sendMessage` | `backend/src/main/java/com/example/lms/ai_assistant/infrastructure/web/AiAssistantControllerV3.java:152` |
AiTokenControllerV3 - 1 endpoint | Method | Endpoint | Handler | Source | | --- | --- | --- | --- | | `POST` | `/api/v3/ai/token` | `exchangeAiToken` | `backend/src/main/java/com/example/lms/ai_assistant/infrastructure/web/AiTokenControllerV3.java:50` |

Assessment (88)

AssignmentControllerV3 - 10 endpoint | Method | Endpoint | Handler | Source | | --- | --- | --- | --- | | `DELETE` | `/api/v3/teacher/assignments/{id}` | `deleteAssignment` | `backend/src/main/java/com/example/lms/assessment/infrastructure/web/AssignmentControllerV3.java:214` | | `GET` | `/api/v3/teacher/assignments/{id}` | `getAssignmentById` | `backend/src/main/java/com/example/lms/assessment/infrastructure/web/AssignmentControllerV3.java:94` | | `PUT` | `/api/v3/teacher/assignments/{id}` | `updateAssignment` | `backend/src/main/java/com/example/lms/assessment/infrastructure/web/AssignmentControllerV3.java:174` | | `GET` | `/api/v3/teacher/assignments/{id}/instruction-attachments` | `listInstructionAttachments` | `backend/src/main/java/com/example/lms/assessment/infrastructure/web/AssignmentControllerV3.java:243` | | `POST` | `/api/v3/teacher/assignments/{id}/instruction-attachments` | `addInstructionAttachment` | `backend/src/main/java/com/example/lms/assessment/infrastructure/web/AssignmentControllerV3.java:229` | | `DELETE` | `/api/v3/teacher/assignments/{id}/instruction-attachments/{attachmentId}` | `deleteInstructionAttachment` | `backend/src/main/java/com/example/lms/assessment/infrastructure/web/AssignmentControllerV3.java:255` | | `GET` | `/api/v3/teacher/assignments/courses/{courseId}` | `getAssignmentsByCourse` | `backend/src/main/java/com/example/lms/assessment/infrastructure/web/AssignmentControllerV3.java:83` | | `POST` | `/api/v3/teacher/assignments/courses/{courseId}` | `createAssignment` | `backend/src/main/java/com/example/lms/assessment/infrastructure/web/AssignmentControllerV3.java:129` | | `GET` | `/api/v3/teacher/assignments/lessons/{lessonId}` | `getAssignmentByLessonId` | `backend/src/main/java/com/example/lms/assessment/infrastructure/web/AssignmentControllerV3.java:108` | | `GET` | `/api/v3/teacher/assignments/summary` | `getTeacherAssignmentsSummary` | `backend/src/main/java/com/example/lms/assessment/infrastructure/web/AssignmentControllerV3.java:74` |
AssignmentSubmissionControllerV3 - 11 endpoint | Method | Endpoint | Handler | Source | | --- | --- | --- | --- | | `GET` | `/api/v3/assignments/{assignmentId}/audit-log` | `getAuditLog` | `backend/src/main/java/com/example/lms/assessment/infrastructure/web/AssignmentSubmissionControllerV3.java:319` | | `GET` | `/api/v3/assignments/{assignmentId}/my-submission` | `getMySubmission` | `backend/src/main/java/com/example/lms/assessment/infrastructure/web/AssignmentSubmissionControllerV3.java:298` | | `PUT` | `/api/v3/assignments/{assignmentId}/publish` | `publishAssignment` | `backend/src/main/java/com/example/lms/assessment/infrastructure/web/AssignmentSubmissionControllerV3.java:353` | | `GET` | `/api/v3/assignments/{assignmentId}/submissions` | `getSubmissions` | `backend/src/main/java/com/example/lms/assessment/infrastructure/web/AssignmentSubmissionControllerV3.java:63` | | `POST` | `/api/v3/assignments/{assignmentId}/submissions` | `submitAssignment` | `backend/src/main/java/com/example/lms/assessment/infrastructure/web/AssignmentSubmissionControllerV3.java:233` | | `PATCH` | `/api/v3/assignments/{assignmentId}/submissions/batch-grade` | `batchGrade` | `backend/src/main/java/com/example/lms/assessment/infrastructure/web/AssignmentSubmissionControllerV3.java:159` | | `GET` | `/api/v3/assignments/{assignmentId}/submissions/details` | `getSubmissionDetails` | `backend/src/main/java/com/example/lms/assessment/infrastructure/web/AssignmentSubmissionControllerV3.java:79` | | `GET` | `/api/v3/assignments/{assignmentId}/submissions/export` | `exportSubmissions` | `backend/src/main/java/com/example/lms/assessment/infrastructure/web/AssignmentSubmissionControllerV3.java:202` | | `GET` | `/api/v3/submissions/{submissionId}` | `getSubmissionById` | `backend/src/main/java/com/example/lms/assessment/infrastructure/web/AssignmentSubmissionControllerV3.java:179` | | `PATCH` | `/api/v3/submissions/{submissionId}/grade` | `gradeSubmission` | `backend/src/main/java/com/example/lms/assessment/infrastructure/web/AssignmentSubmissionControllerV3.java:131` | | `GET` | `/api/v3/submissions/pending` | `getPendingSubmissions` | `backend/src/main/java/com/example/lms/assessment/infrastructure/web/AssignmentSubmissionControllerV3.java:96` |
CopyQuestionsRequest - 3 endpoint | Method | Endpoint | Handler | Source | | --- | --- | --- | --- | | `GET` | `/api/v3/question-banks/{bankId}/export` | `exportQuestions` | `backend/src/main/java/com/example/lms/assessment/infrastructure/web/QuestionBankControllerV3.java:334` | | `POST` | `/api/v3/question-banks/{bankId}/import` | `importQuestions` | `backend/src/main/java/com/example/lms/assessment/infrastructure/web/QuestionBankControllerV3.java:321` | | `GET` | `/api/v3/question-banks/{bankId}/random` | `getRandomQuestions` | `backend/src/main/java/com/example/lms/assessment/infrastructure/web/QuestionBankControllerV3.java:349` |
CreateQuestionRequest - 1 endpoint | Method | Endpoint | Handler | Source | | --- | --- | --- | --- | | `POST` | `/api/v3/questions/import/excel` | `importFromExcel` | `backend/src/main/java/com/example/lms/assessment/infrastructure/web/QuestionControllerV3.java:330` |
distribution - 25 endpoint | Method | Endpoint | Handler | Source | | --- | --- | --- | --- | | `DELETE` | `/api/v3/quizzes/{quizId}` | `deleteQuiz` | `backend/src/main/java/com/example/lms/assessment/infrastructure/web/QuizControllerV3.java:456` | | `GET` | `/api/v3/quizzes/{quizId}` | `getQuizById` | `backend/src/main/java/com/example/lms/assessment/infrastructure/web/QuizControllerV3.java:195` | | `GET` | `/api/v3/quizzes/{quizId}/attempts` | `getQuizAttempts` | `backend/src/main/java/com/example/lms/assessment/infrastructure/web/QuizControllerV3.java:731` | | `GET` | `/api/v3/quizzes/{quizId}/attempts/preflight` | `getQuizPreflight` | `backend/src/main/java/com/example/lms/assessment/infrastructure/web/QuizControllerV3.java:609` | | `POST` | `/api/v3/quizzes/{quizId}/attempts/start` | `startAttempt` | `backend/src/main/java/com/example/lms/assessment/infrastructure/web/QuizControllerV3.java:553` | | `GET` | `/api/v3/quizzes/{quizId}/enrolled-students` | `getEnrolledStudents` | `backend/src/main/java/com/example/lms/assessment/infrastructure/web/QuizControllerV3.java:665` | | `POST` | `/api/v3/quizzes/{quizId}/publish` | `publishQuiz` | `backend/src/main/java/com/example/lms/assessment/infrastructure/web/QuizControllerV3.java:440` | | `GET` | `/api/v3/quizzes/{quizId}/questions` | `getQuizQuestions` | `backend/src/main/java/com/example/lms/assessment/infrastructure/web/QuizControllerV3.java:237` | | `POST` | `/api/v3/quizzes/{quizId}/questions` | `addQuestion` | `backend/src/main/java/com/example/lms/assessment/infrastructure/web/QuizControllerV3.java:339` | | `PUT` | `/api/v3/quizzes/{quizId}/questions` | `updateQuizQuestions` | `backend/src/main/java/com/example/lms/assessment/infrastructure/web/QuizControllerV3.java:404` | | `DELETE` | `/api/v3/quizzes/{quizId}/questions/{questionId}` | `removeQuestion` | `backend/src/main/java/com/example/lms/assessment/infrastructure/web/QuizControllerV3.java:351` | | `PUT` | `/api/v3/quizzes/{quizId}/settings` | `updateQuizSettings` | `backend/src/main/java/com/example/lms/assessment/infrastructure/web/QuizControllerV3.java:363` | | `DELETE` | `/api/v3/quizzes/attempts/{attemptId}` | `deleteAttempt` | `backend/src/main/java/com/example/lms/assessment/infrastructure/web/QuizControllerV3.java:654` | | `GET` | `/api/v3/quizzes/attempts/{attemptId}` | `getAttempt` | `backend/src/main/java/com/example/lms/assessment/infrastructure/web/QuizControllerV3.java:620` | | `PATCH` | `/api/v3/quizzes/attempts/{attemptId}/grade` | `manualGradeQuestion` | `backend/src/main/java/com/example/lms/assessment/infrastructure/web/QuizControllerV3.java:640` | | `PUT` | `/api/v3/quizzes/attempts/{attemptId}/save` | `saveAttemptProgress` | `backend/src/main/java/com/example/lms/assessment/infrastructure/web/QuizControllerV3.java:592` | | `POST` | `/api/v3/quizzes/attempts/{attemptId}/submit` | `submitAttempt` | `backend/src/main/java/com/example/lms/assessment/infrastructure/web/QuizControllerV3.java:567` | | `GET` | `/api/v3/quizzes/lessons/{lessonId}` | `getQuizzesByLesson` | `backend/src/main/java/com/example/lms/assessment/infrastructure/web/QuizControllerV3.java:217` | | `GET` | `/api/v3/quizzes/lessons/{lessonId}/attempts` | `getLessonAttempts` | `backend/src/main/java/com/example/lms/assessment/infrastructure/web/QuizControllerV3.java:760` | | `GET` | `/api/v3/quizzes/lessons/{lessonId}/questions` | `getQuizQuestionsByLesson` | `backend/src/main/java/com/example/lms/assessment/infrastructure/web/QuizControllerV3.java:268` | | `GET` | `/api/v3/quizzes/lessons/{lessonId}/sections/{sectionId}` | `getSectionQuiz` | `backend/src/main/java/com/example/lms/assessment/infrastructure/web/QuizControllerV3.java:279` | | `POST` | `/api/v3/quizzes/lessons/{lessonId}/sections/{sectionId}/submit` | `submitSectionQuiz` | `backend/src/main/java/com/example/lms/assessment/infrastructure/web/QuizControllerV3.java:295` | | `GET` | `/api/v3/quizzes/lessons/{lessonId}/statistics` | `getQuizStatistics` | `backend/src/main/java/com/example/lms/assessment/infrastructure/web/QuizControllerV3.java:783` | | `GET` | `/api/v3/quizzes/student/my-attempts` | `getMyAttempts` | `backend/src/main/java/com/example/lms/assessment/infrastructure/web/QuizControllerV3.java:796` | | `GET` | `/api/v3/quizzes/teacher/quizzes` | `getTeacherQuizzes` | `backend/src/main/java/com/example/lms/assessment/infrastructure/web/QuizControllerV3.java:466` |
DocxPreviewResult - 1 endpoint | Method | Endpoint | Handler | Source | | --- | --- | --- | --- | | `POST` | `/api/v3/questions/import/docx/confirm` | `confirmDocxImport` | `backend/src/main/java/com/example/lms/assessment/infrastructure/web/QuestionControllerV3.java:538` |
ExcelImportResult - 1 endpoint | Method | Endpoint | Handler | Source | | --- | --- | --- | --- | | `POST` | `/api/v3/questions/import/docx/preview` | `previewDocx` | `backend/src/main/java/com/example/lms/assessment/infrastructure/web/QuestionControllerV3.java:453` |
QuestionBankControllerV3 - 14 endpoint | Method | Endpoint | Handler | Source | | --- | --- | --- | --- | | `POST` | `/api/v3/question-banks` | `createBank` | `backend/src/main/java/com/example/lms/assessment/infrastructure/web/QuestionBankControllerV3.java:80` | | `GET` | `/api/v3/question-banks/{id}` | `getBankById` | `backend/src/main/java/com/example/lms/assessment/infrastructure/web/QuestionBankControllerV3.java:60` | | `PUT` | `/api/v3/question-banks/{id}` | `updateBank` | `backend/src/main/java/com/example/lms/assessment/infrastructure/web/QuestionBankControllerV3.java:106` | | `POST` | `/api/v3/question-banks/{id}/archive` | `archiveBank` | `backend/src/main/java/com/example/lms/assessment/infrastructure/web/QuestionBankControllerV3.java:127` | | `GET` | `/api/v3/question-banks/{id}/categories` | `getCategoryTree` | `backend/src/main/java/com/example/lms/assessment/infrastructure/web/QuestionBankControllerV3.java:139` | | `POST` | `/api/v3/question-banks/{id}/categories` | `addCategory` | `backend/src/main/java/com/example/lms/assessment/infrastructure/web/QuestionBankControllerV3.java:152` | | `GET` | `/api/v3/question-banks/{id}/questions` | `getBankQuestions` | `backend/src/main/java/com/example/lms/assessment/infrastructure/web/QuestionBankControllerV3.java:197` | | `DELETE` | `/api/v3/question-banks/categories/{catId}` | `deleteCategory` | `backend/src/main/java/com/example/lms/assessment/infrastructure/web/QuestionBankControllerV3.java:185` | | `PUT` | `/api/v3/question-banks/categories/{catId}` | `updateCategory` | `backend/src/main/java/com/example/lms/assessment/infrastructure/web/QuestionBankControllerV3.java:169` | | `POST` | `/api/v3/question-banks/copy-questions` | `copyQuestions` | `backend/src/main/java/com/example/lms/assessment/infrastructure/web/QuestionBankControllerV3.java:211` | | `POST` | `/api/v3/question-banks/move-questions` | `moveQuestions` | `backend/src/main/java/com/example/lms/assessment/infrastructure/web/QuestionBankControllerV3.java:230` | | `GET` | `/api/v3/question-banks/my-banks` | `getMyBanks` | `backend/src/main/java/com/example/lms/assessment/infrastructure/web/QuestionBankControllerV3.java:50` | | `GET` | `/api/v3/question-banks/public` | `getPublicBanks` | `backend/src/main/java/com/example/lms/assessment/infrastructure/web/QuestionBankControllerV3.java:245` | | `GET` | `/api/v3/question-banks/search` | `searchBanks` | `backend/src/main/java/com/example/lms/assessment/infrastructure/web/QuestionBankControllerV3.java:259` |
QuestionOptionResponse - 3 endpoint | Method | Endpoint | Handler | Source | | --- | --- | --- | --- | | `GET` | `/api/v3/questions/{id}` | `getQuestionById` | `backend/src/main/java/com/example/lms/assessment/infrastructure/web/QuestionControllerV3.java:98` | | `PUT` | `/api/v3/questions/{id}` | `updateQuestion` | `backend/src/main/java/com/example/lms/assessment/infrastructure/web/QuestionControllerV3.java:112` | | `GET` | `/api/v3/questions/my-questions` | `getMyQuestions` | `backend/src/main/java/com/example/lms/assessment/infrastructure/web/QuestionControllerV3.java:83` |
QuizControllerV3 - 4 endpoint | Method | Endpoint | Handler | Source | | --- | --- | --- | --- | | `POST` | `/api/v3/quizzes` | `createQuiz` | `backend/src/main/java/com/example/lms/assessment/infrastructure/web/QuizControllerV3.java:89` | | `POST` | `/api/v3/quizzes/chapters/{chapterId}` | `createChapterQuiz` | `backend/src/main/java/com/example/lms/assessment/infrastructure/web/QuizControllerV3.java:123` | | `POST` | `/api/v3/quizzes/lessons/{lessonId}` | `createLessonQuiz` | `backend/src/main/java/com/example/lms/assessment/infrastructure/web/QuizControllerV3.java:105` | | `POST` | `/api/v3/quizzes/sections/{sectionId}` | `createSectionQuiz` | `backend/src/main/java/com/example/lms/assessment/infrastructure/web/QuizControllerV3.java:141` |
RubricControllerV3 - 8 endpoint | Method | Endpoint | Handler | Source | | --- | --- | --- | --- | | `GET` | `/api/v3/rubrics` | `listRubrics` | `backend/src/main/java/com/example/lms/assessment/infrastructure/web/RubricControllerV3.java:47` | | `POST` | `/api/v3/rubrics` | `createRubric` | `backend/src/main/java/com/example/lms/assessment/infrastructure/web/RubricControllerV3.java:30` | | `DELETE` | `/api/v3/rubrics/{id}` | `deleteRubric` | `backend/src/main/java/com/example/lms/assessment/infrastructure/web/RubricControllerV3.java:90` | | `GET` | `/api/v3/rubrics/{id}` | `getRubric` | `backend/src/main/java/com/example/lms/assessment/infrastructure/web/RubricControllerV3.java:61` | | `PUT` | `/api/v3/rubrics/{id}` | `updateRubric` | `backend/src/main/java/com/example/lms/assessment/infrastructure/web/RubricControllerV3.java:72` | | `POST` | `/api/v3/rubrics/{id}/assign/{assignmentId}` | `assignRubric` | `backend/src/main/java/com/example/lms/assessment/infrastructure/web/RubricControllerV3.java:102` | | `DELETE` | `/api/v3/rubrics/assignment/{assignmentId}` | `unassignRubric` | `backend/src/main/java/com/example/lms/assessment/infrastructure/web/RubricControllerV3.java:115` | | `GET` | `/api/v3/rubrics/assignment/{assignmentId}` | `getAssignmentRubric` | `backend/src/main/java/com/example/lms/assessment/infrastructure/web/RubricControllerV3.java:127` |
StudentAssignmentControllerV3 - 4 endpoint | Method | Endpoint | Handler | Source | | --- | --- | --- | --- | | `GET` | `/api/v3/student/assignments` | `getMyAssignments` | `backend/src/main/java/com/example/lms/assessment/infrastructure/web/StudentAssignmentControllerV3.java:48` | | `GET` | `/api/v3/student/assignments/{id}` | `getAssignmentDetail` | `backend/src/main/java/com/example/lms/assessment/infrastructure/web/StudentAssignmentControllerV3.java:58` | | `GET` | `/api/v3/student/assignments/{id}/submission` | `getMySubmission` | `backend/src/main/java/com/example/lms/assessment/infrastructure/web/StudentAssignmentControllerV3.java:178` | | `POST` | `/api/v3/student/assignments/{id}/submit` | `submitAssignment` | `backend/src/main/java/com/example/lms/assessment/infrastructure/web/StudentAssignmentControllerV3.java:70` |
StudentTaskControllerV3 - 1 endpoint | Method | Endpoint | Handler | Source | | --- | --- | --- | --- | | `GET` | `/api/v3/student/tasks` | `getMyTasks` | `backend/src/main/java/com/example/lms/assessment/infrastructure/web/StudentTaskControllerV3.java:29` |
UpdateQuestionRequest - 2 endpoint | Method | Endpoint | Handler | Source | | --- | --- | --- | --- | | `POST` | `/api/v3/questions` | `createQuestion` | `backend/src/main/java/com/example/lms/assessment/infrastructure/web/QuestionControllerV3.java:166` | | `DELETE` | `/api/v3/questions/{id}` | `deleteQuestion` | `backend/src/main/java/com/example/lms/assessment/infrastructure/web/QuestionControllerV3.java:141` |

Communication (18)

AnnouncementController - 7 endpoint | Method | Endpoint | Handler | Source | | --- | --- | --- | --- | | `GET` | `/api/v3/announcements` | `getAnnouncements` | `backend/src/main/java/com/example/lms/communication/infrastructure/web/AnnouncementController.java:59` | | `POST` | `/api/v3/announcements` | `createAnnouncement` | `backend/src/main/java/com/example/lms/communication/infrastructure/web/AnnouncementController.java:38` | | `DELETE` | `/api/v3/announcements/{id}` | `deleteAnnouncement` | `backend/src/main/java/com/example/lms/communication/infrastructure/web/AnnouncementController.java:104` | | `GET` | `/api/v3/announcements/{id}` | `getAnnouncement` | `backend/src/main/java/com/example/lms/communication/infrastructure/web/AnnouncementController.java:87` | | `POST` | `/api/v3/announcements/mark-read` | `markAsRead` | `backend/src/main/java/com/example/lms/communication/infrastructure/web/AnnouncementController.java:125` | | `GET` | `/api/v3/announcements/read-ids` | `getReadIds` | `backend/src/main/java/com/example/lms/communication/infrastructure/web/AnnouncementController.java:154` | | `GET` | `/api/v3/announcements/unread-count` | `getUnreadCount` | `backend/src/main/java/com/example/lms/communication/infrastructure/web/AnnouncementController.java:144` |
CommunicationControllerV3 - 11 endpoint | Method | Endpoint | Handler | Source | | --- | --- | --- | --- | | `GET` | `/api/v3/messages/conversations` | `getConversations` | `backend/src/main/java/com/example/lms/communication/infrastructure/web/CommunicationControllerV3.java:71` | | `GET` | `/api/v3/messages/conversations/{conversationId}/messages` | `getMessages` | `backend/src/main/java/com/example/lms/communication/infrastructure/web/CommunicationControllerV3.java:123` | | `GET` | `/api/v3/messages/conversations/between` | `getConversationBetween` | `backend/src/main/java/com/example/lms/communication/infrastructure/web/CommunicationControllerV3.java:95` | | `PATCH` | `/api/v3/messages/mark-read` | `markAsRead` | `backend/src/main/java/com/example/lms/communication/infrastructure/web/CommunicationControllerV3.java:269` | | `GET` | `/api/v3/messages/online-status` | `getOnlineStatus` | `backend/src/main/java/com/example/lms/communication/infrastructure/web/CommunicationControllerV3.java:409` | | `GET` | `/api/v3/messages/reactions` | `getReactions` | `backend/src/main/java/com/example/lms/communication/infrastructure/web/CommunicationControllerV3.java:393` | | `POST` | `/api/v3/messages/reactions` | `addReaction` | `backend/src/main/java/com/example/lms/communication/infrastructure/web/CommunicationControllerV3.java:354` | | `POST` | `/api/v3/messages/recall` | `recallMessage` | `backend/src/main/java/com/example/lms/communication/infrastructure/web/CommunicationControllerV3.java:315` | | `GET` | `/api/v3/messages/recipients` | `listRecipients` | `backend/src/main/java/com/example/lms/communication/infrastructure/web/CommunicationControllerV3.java:183` | | `POST` | `/api/v3/messages/send` | `sendMessage` | `backend/src/main/java/com/example/lms/communication/infrastructure/web/CommunicationControllerV3.java:200` | | `GET` | `/api/v3/messages/unread-count` | `getUnreadCount` | `backend/src/main/java/com/example/lms/communication/infrastructure/web/CommunicationControllerV3.java:306` |

Competency mapping (6)

CompetencyMappingController - 6 endpoint | Method | Endpoint | Handler | Source | | --- | --- | --- | --- | | `GET` | `/api/v3/courses/{courseId}/competency-map` | `getCourseCompetencyMap` | `backend/src/main/java/com/example/lms/competency_mapping/infrastructure/web/CompetencyMappingController.java:69` | | `GET` | `/api/v3/courses/{courseId}/competency-map/export` | `exportCsv` | `backend/src/main/java/com/example/lms/competency_mapping/infrastructure/web/CompetencyMappingController.java:112` | | `GET` | `/api/v3/lessons/{lessonId}/competencies` | `getLessonCompetencies` | `backend/src/main/java/com/example/lms/competency_mapping/infrastructure/web/CompetencyMappingController.java:102` | | `PUT` | `/api/v3/lessons/{lessonId}/competencies` | `updateLessonCompetencies` | `backend/src/main/java/com/example/lms/competency_mapping/infrastructure/web/CompetencyMappingController.java:79` | | `GET` | `/api/v3/standards` | `getStandards` | `backend/src/main/java/com/example/lms/competency_mapping/infrastructure/web/CompetencyMappingController.java:52` | | `GET` | `/api/v3/standards/{standardId}/competencies` | `getCompetencies` | `backend/src/main/java/com/example/lms/competency_mapping/infrastructure/web/CompetencyMappingController.java:60` |

Course authoring (76)

AdminCoursesControllerV3 - 11 endpoint | Method | Endpoint | Handler | Source | | --- | --- | --- | --- | | `DELETE` | `/api/v3/admin/courses/{courseId}` | `deleteCourse` | `backend/src/main/java/com/example/lms/course_authoring/infrastructure/web/AdminCoursesControllerV3.java:448` | | `PATCH` | `/api/v3/admin/courses/{courseId}/approve` | `approveCourse` | `backend/src/main/java/com/example/lms/course_authoring/infrastructure/web/AdminCoursesControllerV3.java:277` | | `PATCH` | `/api/v3/admin/courses/{courseId}/reject` | `rejectCourse` | `backend/src/main/java/com/example/lms/course_authoring/infrastructure/web/AdminCoursesControllerV3.java:295` | | `GET` | `/api/v3/admin/courses/{courseId}/review-history` | `getReviewHistory` | `backend/src/main/java/com/example/lms/course_authoring/infrastructure/web/AdminCoursesControllerV3.java:341` | | `PATCH` | `/api/v3/admin/courses/{courseId}/revoke` | `revokeCourse` | `backend/src/main/java/com/example/lms/course_authoring/infrastructure/web/AdminCoursesControllerV3.java:315` | | `GET` | `/api/v3/admin/courses/all` | `getAllCourses` | `backend/src/main/java/com/example/lms/course_authoring/infrastructure/web/AdminCoursesControllerV3.java:66` | | `GET` | `/api/v3/admin/courses/analytics` | `getCourseAnalytics` | `backend/src/main/java/com/example/lms/course_authoring/infrastructure/web/AdminCoursesControllerV3.java:120` | | `GET` | `/api/v3/admin/courses/analytics/window` | `getWindowedAnalytics` | `backend/src/main/java/com/example/lms/course_authoring/infrastructure/web/AdminCoursesControllerV3.java:265` | | `PATCH` | `/api/v3/admin/courses/bulk-approve` | `bulkApproveCourses` | `backend/src/main/java/com/example/lms/course_authoring/infrastructure/web/AdminCoursesControllerV3.java:366` | | `PATCH` | `/api/v3/admin/courses/bulk-reject` | `bulkRejectCourses` | `backend/src/main/java/com/example/lms/course_authoring/infrastructure/web/AdminCoursesControllerV3.java:406` | | `GET` | `/api/v3/admin/courses/pending` | `getPendingCourses` | `backend/src/main/java/com/example/lms/course_authoring/infrastructure/web/AdminCoursesControllerV3.java:103` |
ClassInfoResponse - 3 endpoint | Method | Endpoint | Handler | Source | | --- | --- | --- | --- | | `GET` | `/api/v3/courses/chapters/{chapterId}` | `getChapterById` | `backend/src/main/java/com/example/lms/course_authoring/infrastructure/web/CourseQueryControllerV3.java:557` | | `GET` | `/api/v3/courses/chapters/{chapterId}/lessons` | `getChapterLessons` | `backend/src/main/java/com/example/lms/course_authoring/infrastructure/web/CourseQueryControllerV3.java:530` | | `GET` | `/api/v3/courses/lessons/{lessonId}` | `getLessonById` | `backend/src/main/java/com/example/lms/course_authoring/infrastructure/web/CourseQueryControllerV3.java:405` |
CourseAuthoringControllerV3 - 14 endpoint | Method | Endpoint | Handler | Source | | --- | --- | --- | --- | | `PUT` | `/api/v3/courses/{courseId}` | `updateCourse` | `backend/src/main/java/com/example/lms/course_authoring/infrastructure/web/CourseAuthoringControllerV3.java:438` | | `POST` | `/api/v3/courses/{courseId}/chapters` | `createChapter` | `backend/src/main/java/com/example/lms/course_authoring/infrastructure/web/CourseAuthoringControllerV3.java:69` | | `DELETE` | `/api/v3/courses/chapters/{chapterId}` | `deleteChapter` | `backend/src/main/java/com/example/lms/course_authoring/infrastructure/web/CourseAuthoringControllerV3.java:135` | | `PUT` | `/api/v3/courses/chapters/{chapterId}` | `updateChapter` | `backend/src/main/java/com/example/lms/course_authoring/infrastructure/web/CourseAuthoringControllerV3.java:115` | | `POST` | `/api/v3/courses/chapters/{chapterId}/lessons` | `createLesson` | `backend/src/main/java/com/example/lms/course_authoring/infrastructure/web/CourseAuthoringControllerV3.java:90` | | `PATCH` | `/api/v3/courses/chapters/reorder` | `reorderChapters` | `backend/src/main/java/com/example/lms/course_authoring/infrastructure/web/CourseAuthoringControllerV3.java:199` | | `DELETE` | `/api/v3/courses/lessons/{lessonId}` | `deleteLesson` | `backend/src/main/java/com/example/lms/course_authoring/infrastructure/web/CourseAuthoringControllerV3.java:176` | | `PUT` | `/api/v3/courses/lessons/{lessonId}` | `updateLesson` | `backend/src/main/java/com/example/lms/course_authoring/infrastructure/web/CourseAuthoringControllerV3.java:148` | | `POST` | `/api/v3/courses/lessons/{lessonId}/sections` | `addSection` | `backend/src/main/java/com/example/lms/course_authoring/infrastructure/web/CourseAuthoringControllerV3.java:309` | | `DELETE` | `/api/v3/courses/lessons/{lessonId}/sections/{sectionId}` | `deleteSection` | `backend/src/main/java/com/example/lms/course_authoring/infrastructure/web/CourseAuthoringControllerV3.java:425` | | `PUT` | `/api/v3/courses/lessons/{lessonId}/sections/{sectionId}` | `updateSection` | `backend/src/main/java/com/example/lms/course_authoring/infrastructure/web/CourseAuthoringControllerV3.java:367` | | `PATCH` | `/api/v3/courses/lessons/reorder` | `reorderLessons` | `backend/src/main/java/com/example/lms/course_authoring/infrastructure/web/CourseAuthoringControllerV3.java:226` | | `PATCH` | `/api/v3/courses/sections/move` | `moveSection` | `backend/src/main/java/com/example/lms/course_authoring/infrastructure/web/CourseAuthoringControllerV3.java:253` | | `PATCH` | `/api/v3/courses/sections/reorder` | `reorderSections` | `backend/src/main/java/com/example/lms/course_authoring/infrastructure/web/CourseAuthoringControllerV3.java:279` |
CourseAuthoringSupportControllerV3 - 1 endpoint | Method | Endpoint | Handler | Source | | --- | --- | --- | --- | | `GET` | `/api/v3/categories` | `getCategories` | `backend/src/main/java/com/example/lms/course_authoring/infrastructure/web/CourseAuthoringControllerV3.java:872` |
CourseCategoryControllerV3 - 7 endpoint | Method | Endpoint | Handler | Source | | --- | --- | --- | --- | | `GET` | `/api/v3/admin/course-categories` | `getFullTree` | `backend/src/main/java/com/example/lms/course_authoring/infrastructure/web/CourseCategoryControllerV3.java:51` | | `POST` | `/api/v3/admin/course-categories` | `create` | `backend/src/main/java/com/example/lms/course_authoring/infrastructure/web/CourseCategoryControllerV3.java:62` | | `DELETE` | `/api/v3/admin/course-categories/{id}` | `deactivate` | `backend/src/main/java/com/example/lms/course_authoring/infrastructure/web/CourseCategoryControllerV3.java:87` | | `PUT` | `/api/v3/admin/course-categories/{id}` | `update` | `backend/src/main/java/com/example/lms/course_authoring/infrastructure/web/CourseCategoryControllerV3.java:77` | | `PATCH` | `/api/v3/admin/course-categories/{id}/move` | `move` | `backend/src/main/java/com/example/lms/course_authoring/infrastructure/web/CourseCategoryControllerV3.java:119` | | `PUT` | `/api/v3/admin/course-categories/reorder` | `reorder` | `backend/src/main/java/com/example/lms/course_authoring/infrastructure/web/CourseCategoryControllerV3.java:96` | | `GET` | `/api/v3/course-categories` | `getActiveTree` | `backend/src/main/java/com/example/lms/course_authoring/infrastructure/web/CourseCategoryControllerV3.java:36` |
CourseQueryControllerV3 - 5 endpoint | Method | Endpoint | Handler | Source | | --- | --- | --- | --- | | `GET` | `/api/v3/courses` | `getPublicCourses` | `backend/src/main/java/com/example/lms/course_authoring/infrastructure/web/CourseQueryControllerV3.java:72` | | `GET` | `/api/v3/courses/{courseId}` | `getCourseById` | `backend/src/main/java/com/example/lms/course_authoring/infrastructure/web/CourseQueryControllerV3.java:144` | | `GET` | `/api/v3/courses/{courseId}/content` | `getCourseContent` | `backend/src/main/java/com/example/lms/course_authoring/infrastructure/web/CourseQueryControllerV3.java:199` | | `GET` | `/api/v3/courses/{courseId}/instructors` | `getCourseInstructors` | `backend/src/main/java/com/example/lms/course_authoring/infrastructure/web/CourseQueryControllerV3.java:260` | | `GET` | `/api/v3/courses/versions` | `getCourseVersions` | `backend/src/main/java/com/example/lms/course_authoring/infrastructure/web/CourseQueryControllerV3.java:171` |
CourseReviewControllerV3 - 5 endpoint | Method | Endpoint | Handler | Source | | --- | --- | --- | --- | | `GET` | `/api/v3/courses/{courseId}/reviews` | `getReviews` | `backend/src/main/java/com/example/lms/course_authoring/infrastructure/web/CourseReviewControllerV3.java:47` | | `POST` | `/api/v3/courses/{courseId}/reviews` | `submitReview` | `backend/src/main/java/com/example/lms/course_authoring/infrastructure/web/CourseReviewControllerV3.java:32` | | `DELETE` | `/api/v3/courses/{courseId}/reviews/{reviewId}` | `deleteReview` | `backend/src/main/java/com/example/lms/course_authoring/infrastructure/web/CourseReviewControllerV3.java:94` | | `GET` | `/api/v3/courses/{courseId}/reviews/my-review` | `getMyReview` | `backend/src/main/java/com/example/lms/course_authoring/infrastructure/web/CourseReviewControllerV3.java:81` | | `GET` | `/api/v3/courses/{courseId}/reviews/summary` | `getReviewSummary` | `backend/src/main/java/com/example/lms/course_authoring/infrastructure/web/CourseReviewControllerV3.java:72` |
CourseTagControllerV3 - 6 endpoint | Method | Endpoint | Handler | Source | | --- | --- | --- | --- | | `GET` | `/api/v3/admin/course-tags` | `getAllAdmin` | `backend/src/main/java/com/example/lms/course_authoring/infrastructure/web/CourseTagControllerV3.java:42` | | `POST` | `/api/v3/admin/course-tags` | `create` | `backend/src/main/java/com/example/lms/course_authoring/infrastructure/web/CourseTagControllerV3.java:50` | | `DELETE` | `/api/v3/admin/course-tags/{id}` | `delete` | `backend/src/main/java/com/example/lms/course_authoring/infrastructure/web/CourseTagControllerV3.java:66` | | `PUT` | `/api/v3/admin/course-tags/{id}` | `rename` | `backend/src/main/java/com/example/lms/course_authoring/infrastructure/web/CourseTagControllerV3.java:58` | | `GET` | `/api/v3/course-tags` | `getAll` | `backend/src/main/java/com/example/lms/course_authoring/infrastructure/web/CourseTagControllerV3.java:33` | | `PUT` | `/api/v3/courses/{courseId}/tags` | `setCourseTags` | `backend/src/main/java/com/example/lms/course_authoring/infrastructure/web/CourseTagControllerV3.java:76` |
InstructorResponse - 2 endpoint | Method | Endpoint | Handler | Source | | --- | --- | --- | --- | | `GET` | `/api/v3/courses/{courseId}/classes` | `getCourseClasses` | `backend/src/main/java/com/example/lms/course_authoring/infrastructure/web/CourseQueryControllerV3.java:314` | | `GET` | `/api/v3/courses/{courseId}/classes/search` | `searchCourseClasses` | `backend/src/main/java/com/example/lms/course_authoring/infrastructure/web/CourseQueryControllerV3.java:327` |
PackageControllerV3 - 9 endpoint | Method | Endpoint | Handler | Source | | --- | --- | --- | --- | | `GET` | `/api/v3/packages` | `getAllPackages` | `backend/src/main/java/com/example/lms/course_authoring/infrastructure/web/PackageControllerV3.java:45` | | `POST` | `/api/v3/packages` | `createPackage` | `backend/src/main/java/com/example/lms/course_authoring/infrastructure/web/PackageControllerV3.java:81` | | `DELETE` | `/api/v3/packages/{id}` | `deletePackage` | `backend/src/main/java/com/example/lms/course_authoring/infrastructure/web/PackageControllerV3.java:128` | | `GET` | `/api/v3/packages/{id}` | `getPackageById` | `backend/src/main/java/com/example/lms/course_authoring/infrastructure/web/PackageControllerV3.java:63` | | `PUT` | `/api/v3/packages/{id}` | `updatePackage` | `backend/src/main/java/com/example/lms/course_authoring/infrastructure/web/PackageControllerV3.java:104` | | `GET` | `/api/v3/packages/{id}/questions` | `getQuestionsInPackage` | `backend/src/main/java/com/example/lms/course_authoring/infrastructure/web/PackageControllerV3.java:142` | | `POST` | `/api/v3/packages/move-questions` | `moveQuestions` | `backend/src/main/java/com/example/lms/course_authoring/infrastructure/web/PackageControllerV3.java:204` | | `GET` | `/api/v3/packages/my-packages` | `getMyPackages` | `backend/src/main/java/com/example/lms/course_authoring/infrastructure/web/PackageControllerV3.java:33` | | `GET` | `/api/v3/packages/search` | `searchPackages` | `backend/src/main/java/com/example/lms/course_authoring/infrastructure/web/PackageControllerV3.java:241` |
StudentInfoResponse - 2 endpoint | Method | Endpoint | Handler | Source | | --- | --- | --- | --- | | `GET` | `/api/v3/teacher/courses/{courseId}/publications` | `listPublications` | `backend/src/main/java/com/example/lms/course_authoring/infrastructure/web/TeacherCoursesControllerV3.java:369` | | `POST` | `/api/v3/teacher/courses/{courseId}/publications/{publicationId}/adopt-all` | `bulkAdoptPublication` | `backend/src/main/java/com/example/lms/course_authoring/infrastructure/web/TeacherCoursesControllerV3.java:400` |
TeacherCoursesControllerV3 - 11 endpoint | Method | Endpoint | Handler | Source | | --- | --- | --- | --- | | `POST` | `/api/v3/teacher/courses` | `createCourse` | `backend/src/main/java/com/example/lms/course_authoring/infrastructure/web/TeacherCoursesControllerV3.java:167` | | `DELETE` | `/api/v3/teacher/courses/{courseId}` | `deleteCourse` | `backend/src/main/java/com/example/lms/course_authoring/infrastructure/web/TeacherCoursesControllerV3.java:187` | | `GET` | `/api/v3/teacher/courses/{courseId}` | `getCourseById` | `backend/src/main/java/com/example/lms/course_authoring/infrastructure/web/TeacherCoursesControllerV3.java:147` | | `PUT` | `/api/v3/teacher/courses/{courseId}` | `updateCourse` | `backend/src/main/java/com/example/lms/course_authoring/infrastructure/web/TeacherCoursesControllerV3.java:176` | | `POST` | `/api/v3/teacher/courses/{courseId}/cancel-approval` | `cancelApproval` | `backend/src/main/java/com/example/lms/course_authoring/infrastructure/web/TeacherCoursesControllerV3.java:209` | | `GET` | `/api/v3/teacher/courses/{courseId}/draft/content` | `getCourseDraftContent` | `backend/src/main/java/com/example/lms/course_authoring/infrastructure/web/TeacherCoursesControllerV3.java:158` | | `GET` | `/api/v3/teacher/courses/{courseId}/review-history` | `getReviewHistory` | `backend/src/main/java/com/example/lms/course_authoring/infrastructure/web/TeacherCoursesControllerV3.java:229` | | `GET` | `/api/v3/teacher/courses/{courseId}/review-status` | `getReviewStatus` | `backend/src/main/java/com/example/lms/course_authoring/infrastructure/web/TeacherCoursesControllerV3.java:219` | | `GET` | `/api/v3/teacher/courses/{courseId}/students` | `getCourseStudents` | `backend/src/main/java/com/example/lms/course_authoring/infrastructure/web/TeacherCoursesControllerV3.java:254` | | `POST` | `/api/v3/teacher/courses/{courseId}/submit-for-approval` | `submitForApproval` | `backend/src/main/java/com/example/lms/course_authoring/infrastructure/web/TeacherCoursesControllerV3.java:197` | | `GET` | `/api/v3/teacher/courses/my-courses` | `getMyCourses` | `backend/src/main/java/com/example/lms/course_authoring/infrastructure/web/TeacherCoursesControllerV3.java:52` |

Identity, auth và user (50)

AuthControllerV3 - 14 endpoint | Method | Endpoint | Handler | Source | | --- | --- | --- | --- | | `POST` | `/api/v3/auth/forgot-password` | `forgotPassword` | `backend/src/main/java/com/example/lms/identity/infrastructure/web/AuthControllerV3.java:257` | | `POST` | `/api/v3/auth/google` | `loginWithGoogle` | `backend/src/main/java/com/example/lms/identity/infrastructure/web/AuthControllerV3.java:158` | | `GET` | `/api/v3/auth/google/config` | `getGoogleAuthConfig` | `backend/src/main/java/com/example/lms/identity/infrastructure/web/AuthControllerV3.java:169` | | `POST` | `/api/v3/auth/login` | `login` | `backend/src/main/java/com/example/lms/identity/infrastructure/web/AuthControllerV3.java:117` | | `POST` | `/api/v3/auth/logout` | `logout` | `backend/src/main/java/com/example/lms/identity/infrastructure/web/AuthControllerV3.java:184` | | `POST` | `/api/v3/auth/lookup` | `lookupAuthOptions` | `backend/src/main/java/com/example/lms/identity/infrastructure/web/AuthControllerV3.java:131` | | `GET` | `/api/v3/auth/me` | `getCurrentUser` | `backend/src/main/java/com/example/lms/identity/infrastructure/web/AuthControllerV3.java:190` | | `PUT` | `/api/v3/auth/password` | `changePassword` | `backend/src/main/java/com/example/lms/identity/infrastructure/web/AuthControllerV3.java:228` | | `PUT` | `/api/v3/auth/profile` | `updateProfile` | `backend/src/main/java/com/example/lms/identity/infrastructure/web/AuthControllerV3.java:205` | | `POST` | `/api/v3/auth/refresh` | `refreshToken` | `backend/src/main/java/com/example/lms/identity/infrastructure/web/AuthControllerV3.java:248` | | `POST` | `/api/v3/auth/register` | `register` | `backend/src/main/java/com/example/lms/identity/infrastructure/web/AuthControllerV3.java:85` | | `POST` | `/api/v3/auth/resend-verification` | `resendVerification` | `backend/src/main/java/com/example/lms/identity/infrastructure/web/AuthControllerV3.java:287` | | `POST` | `/api/v3/auth/reset-password` | `resetPassword` | `backend/src/main/java/com/example/lms/identity/infrastructure/web/AuthControllerV3.java:269` | | `POST` | `/api/v3/auth/verify-email` | `verifyEmail` | `backend/src/main/java/com/example/lms/identity/infrastructure/web/AuthControllerV3.java:278` |
GoogleOAuthRedirectController - 2 endpoint | Method | Endpoint | Handler | Source | | --- | --- | --- | --- | | `GET` | `/api/v3/auth/google/authorize` | `authorize` | `backend/src/main/java/com/example/lms/identity/infrastructure/web/GoogleOAuthRedirectController.java:80` | | `GET` | `/api/v3/auth/google/callback` | `callback` | `backend/src/main/java/com/example/lms/identity/infrastructure/web/GoogleOAuthRedirectController.java:112` |
InviteControllerV3 - 3 endpoint | Method | Endpoint | Handler | Source | | --- | --- | --- | --- | | `POST` | `/api/v3/invites/accept` | `acceptInvite` | `backend/src/main/java/com/example/lms/identity/infrastructure/web/InviteControllerV3.java:47` | | `GET` | `/api/v3/invites/validate` | `validateCode` | `backend/src/main/java/com/example/lms/identity/infrastructure/web/InviteControllerV3.java:31` | | `GET` | `/api/v3/invites/validate-token` | `validateToken` | `backend/src/main/java/com/example/lms/identity/infrastructure/web/InviteControllerV3.java:39` |
OrganizationControllerV3 - 17 endpoint | Method | Endpoint | Handler | Source | | --- | --- | --- | --- | | `GET` | `/api/v3/organizations` | `listOrganizations` | `backend/src/main/java/com/example/lms/identity/infrastructure/web/OrganizationControllerV3.java:59` | | `POST` | `/api/v3/organizations` | `createOrganization` | `backend/src/main/java/com/example/lms/identity/infrastructure/web/OrganizationControllerV3.java:127` | | `GET` | `/api/v3/organizations/{id}` | `getOrganization` | `backend/src/main/java/com/example/lms/identity/infrastructure/web/OrganizationControllerV3.java:115` | | `PUT` | `/api/v3/organizations/{id}` | `updateOrganization` | `backend/src/main/java/com/example/lms/identity/infrastructure/web/OrganizationControllerV3.java:138` | | `DELETE` | `/api/v3/organizations/{id}/admins/{userId}` | `demoteOrgAdmin` | `backend/src/main/java/com/example/lms/identity/infrastructure/web/OrganizationControllerV3.java:302` | | `POST` | `/api/v3/organizations/{id}/admins/{userId}` | `promoteOrgAdmin` | `backend/src/main/java/com/example/lms/identity/infrastructure/web/OrganizationControllerV3.java:290` | | `GET` | `/api/v3/organizations/{id}/invites` | `listInvites` | `backend/src/main/java/com/example/lms/identity/infrastructure/web/OrganizationControllerV3.java:339` | | `DELETE` | `/api/v3/organizations/{id}/invites/{inviteId}` | `revokeInvite` | `backend/src/main/java/com/example/lms/identity/infrastructure/web/OrganizationControllerV3.java:349` | | `POST` | `/api/v3/organizations/{id}/invites/code` | `createInviteCode` | `backend/src/main/java/com/example/lms/identity/infrastructure/web/OrganizationControllerV3.java:315` | | `POST` | `/api/v3/organizations/{id}/invites/email` | `sendEmailInvite` | `backend/src/main/java/com/example/lms/identity/infrastructure/web/OrganizationControllerV3.java:327` | | `GET` | `/api/v3/organizations/{id}/members` | `listMembers` | `backend/src/main/java/com/example/lms/identity/infrastructure/web/OrganizationControllerV3.java:155` | | `POST` | `/api/v3/organizations/{id}/members` | `addMember` | `backend/src/main/java/com/example/lms/identity/infrastructure/web/OrganizationControllerV3.java:177` | | `DELETE` | `/api/v3/organizations/{id}/members/{userId}` | `removeMember` | `backend/src/main/java/com/example/lms/identity/infrastructure/web/OrganizationControllerV3.java:216` | | `PUT` | `/api/v3/organizations/{id}/members/{userId}/token-config` | `setMemberTokenExpiry` | `backend/src/main/java/com/example/lms/identity/infrastructure/web/OrganizationControllerV3.java:249` | | `GET` | `/api/v3/organizations/default` | `getDefaultOrganization` | `backend/src/main/java/com/example/lms/identity/infrastructure/web/OrganizationControllerV3.java:85` | | `GET` | `/api/v3/organizations/stats` | `getStats` | `backend/src/main/java/com/example/lms/identity/infrastructure/web/OrganizationControllerV3.java:94` | | `GET` | `/api/v3/organizations/stats/revenue` | `getCrossOrgRevenue` | `backend/src/main/java/com/example/lms/identity/infrastructure/web/OrganizationControllerV3.java:108` |
UserControllerV3 - 14 endpoint | Method | Endpoint | Handler | Source | | --- | --- | --- | --- | | `GET` | `/api/v3/users` | `getUsers` | `backend/src/main/java/com/example/lms/identity/infrastructure/web/UserControllerV3.java:68` | | `POST` | `/api/v3/users` | `createUser` | `backend/src/main/java/com/example/lms/identity/infrastructure/web/UserControllerV3.java:366` | | `DELETE` | `/api/v3/users/{userId}` | `deleteUser` | `backend/src/main/java/com/example/lms/identity/infrastructure/web/UserControllerV3.java:569` | | `GET` | `/api/v3/users/{userId}` | `getUserById` | `backend/src/main/java/com/example/lms/identity/infrastructure/web/UserControllerV3.java:343` | | `PUT` | `/api/v3/users/{userId}` | `updateUser` | `backend/src/main/java/com/example/lms/identity/infrastructure/web/UserControllerV3.java:504` | | `GET` | `/api/v3/users/{userId}/coop-courses` | `getUserCoopCourses` | `backend/src/main/java/com/example/lms/identity/infrastructure/web/UserControllerV3.java:715` | | `GET` | `/api/v3/users/{userId}/enrolled-courses` | `getUserEnrolledCourses` | `backend/src/main/java/com/example/lms/identity/infrastructure/web/UserControllerV3.java:621` | | `GET` | `/api/v3/users/{userId}/managed-courses` | `getUserManagedCourses` | `backend/src/main/java/com/example/lms/identity/infrastructure/web/UserControllerV3.java:681` | | `PATCH` | `/api/v3/users/{userId}/status` | `updateUserStatus` | `backend/src/main/java/com/example/lms/identity/infrastructure/web/UserControllerV3.java:580` | | `PATCH` | `/api/v3/users/{userId}/toggle-status` | `toggleUserStatus` | `backend/src/main/java/com/example/lms/identity/infrastructure/web/UserControllerV3.java:545` | | `POST` | `/api/v3/users/bulk-import` | `bulkImportUsers` | `backend/src/main/java/com/example/lms/identity/infrastructure/web/UserControllerV3.java:402` | | `GET` | `/api/v3/users/instructors` | `getInstructors` | `backend/src/main/java/com/example/lms/identity/infrastructure/web/UserControllerV3.java:313` | | `GET` | `/api/v3/users/list/all` | `getAllUsersNoPagination` | `backend/src/main/java/com/example/lms/identity/infrastructure/web/UserControllerV3.java:205` | | `GET` | `/api/v3/users/search` | `searchUsers` | `backend/src/main/java/com/example/lms/identity/infrastructure/web/UserControllerV3.java:226` |

Learning delivery (90)

AdaptiveVideoPlaybackController - 5 endpoint | Method | Endpoint | Handler | Source | | --- | --- | --- | --- | | `GET` | `/api/v3/video-assets/{assetId}/adaptive/{token}/dash/manifest.mpd` | `getDashManifest` | `backend/src/main/java/com/example/lms/learning_delivery/infrastructure/web/AdaptiveVideoPlaybackController.java:56` | | `GET` | `/api/v3/video-assets/{assetId}/adaptive/{token}/hls/master.m3u8` | `getHlsMasterManifest` | `backend/src/main/java/com/example/lms/learning_delivery/infrastructure/web/AdaptiveVideoPlaybackController.java:35` | | `GET` | `/api/v3/video-assets/{assetId}/adaptive/{token}/hls/playlist` | `getHlsPlaylist` | `backend/src/main/java/com/example/lms/learning_delivery/infrastructure/web/AdaptiveVideoPlaybackController.java:45` | | `GET` | `/api/v3/video-assets/{assetId}/adaptive/{token}/object` | `getObject` | `backend/src/main/java/com/example/lms/learning_delivery/infrastructure/web/AdaptiveVideoPlaybackController.java:66` | | `HEAD` | `/api/v3/video-assets/{assetId}/adaptive/{token}/object` | `headObject` | `backend/src/main/java/com/example/lms/learning_delivery/infrastructure/web/AdaptiveVideoPlaybackController.java:103` |
after - 2 endpoint | Method | Endpoint | Handler | Source | | --- | --- | --- | --- | | `POST` | `/api/v3/classes/{classId}/enroll-paid` | `enrollPaidStudents` | `backend/src/main/java/com/example/lms/learning_delivery/infrastructure/web/ClassControllerV3.java:513` | | `GET` | `/api/v3/classes/by-course/{courseId}/paid-unenrolled` | `getPaidUnenrolledStudents` | `backend/src/main/java/com/example/lms/learning_delivery/infrastructure/web/ClassControllerV3.java:482` |
by - 2 endpoint | Method | Endpoint | Handler | Source | | --- | --- | --- | --- | | `GET` | `/api/v3/classes/{classId}` | `getClassById` | `backend/src/main/java/com/example/lms/learning_delivery/infrastructure/web/ClassControllerV3.java:328` | | `POST` | `/api/v3/classes/{classId}/adopt-publication` | `adoptPublication` | `backend/src/main/java/com/example/lms/learning_delivery/infrastructure/web/ClassControllerV3.java:341` |
CertificateControllerV3 - 3 endpoint | Method | Endpoint | Handler | Source | | --- | --- | --- | --- | | `GET` | `/api/v3/certificates/{id}/download` | `downloadCertificate` | `backend/src/main/java/com/example/lms/learning_delivery/infrastructure/web/CertificateControllerV3.java:49` | | `GET` | `/api/v3/certificates/my` | `getMyCertificates` | `backend/src/main/java/com/example/lms/learning_delivery/infrastructure/web/CertificateControllerV3.java:35` | | `GET` | `/api/v3/certificates/verify/{token}` | `verifyCertificate` | `backend/src/main/java/com/example/lms/learning_delivery/infrastructure/web/CertificateControllerV3.java:88` |
ClassControllerV3 - 5 endpoint | Method | Endpoint | Handler | Source | | --- | --- | --- | --- | | `POST` | `/api/v3/classes` | `createClass` | `backend/src/main/java/com/example/lms/learning_delivery/infrastructure/web/ClassControllerV3.java:220` | | `DELETE` | `/api/v3/classes/{classId}` | `deleteClass` | `backend/src/main/java/com/example/lms/learning_delivery/infrastructure/web/ClassControllerV3.java:314` | | `PUT` | `/api/v3/classes/{classId}` | `updateClass` | `backend/src/main/java/com/example/lms/learning_delivery/infrastructure/web/ClassControllerV3.java:273` | | `GET` | `/api/v3/classes/by-course/{courseId}` | `getClassesByCourse` | `backend/src/main/java/com/example/lms/learning_delivery/infrastructure/web/ClassControllerV3.java:67` | | `GET` | `/api/v3/classes/by-course/{courseId}/search` | `searchClassesByCourse` | `backend/src/main/java/com/example/lms/learning_delivery/infrastructure/web/ClassControllerV3.java:80` |
GamificationControllerV3 - 8 endpoint | Method | Endpoint | Handler | Source | | --- | --- | --- | --- | | `POST` | `/api/v3/gamification/check-achievements` | `checkAchievements` | `backend/src/main/java/com/example/lms/learning_delivery/infrastructure/web/GamificationControllerV3.java:45` | | `POST` | `/api/v3/gamification/check-streak` | `checkStreak` | `backend/src/main/java/com/example/lms/learning_delivery/infrastructure/web/GamificationControllerV3.java:37` | | `GET` | `/api/v3/gamification/notifications` | `getNotifications` | `backend/src/main/java/com/example/lms/learning_delivery/infrastructure/web/GamificationControllerV3.java:53` | | `DELETE` | `/api/v3/gamification/notifications/{id}` | `deleteNotification` | `backend/src/main/java/com/example/lms/learning_delivery/infrastructure/web/GamificationControllerV3.java:80` | | `PATCH` | `/api/v3/gamification/notifications/{id}/read` | `markNotificationRead` | `backend/src/main/java/com/example/lms/learning_delivery/infrastructure/web/GamificationControllerV3.java:63` | | `PATCH` | `/api/v3/gamification/notifications/read-all` | `markAllNotificationsRead` | `backend/src/main/java/com/example/lms/learning_delivery/infrastructure/web/GamificationControllerV3.java:72` | | `GET` | `/api/v3/gamification/notifications/unread-count` | `getUnreadCount` | `backend/src/main/java/com/example/lms/learning_delivery/infrastructure/web/GamificationControllerV3.java:89` | | `GET` | `/api/v3/gamification/profile` | `getProfile` | `backend/src/main/java/com/example/lms/learning_delivery/infrastructure/web/GamificationControllerV3.java:29` |
LearningActivityControllerV3 - 7 endpoint | Method | Endpoint | Handler | Source | | --- | --- | --- | --- | | `GET` | `/api/v3/learning-activity/continue` | `getContinueWhereLeftOff` | `backend/src/main/java/com/example/lms/learning_delivery/infrastructure/web/LearningActivityControllerV3.java:97` | | `POST` | `/api/v3/learning-activity/heartbeat` | `recordHeartbeat` | `backend/src/main/java/com/example/lms/learning_delivery/infrastructure/web/LearningActivityControllerV3.java:43` | | `GET` | `/api/v3/learning-activity/heatmap` | `getHeatmap` | `backend/src/main/java/com/example/lms/learning_delivery/infrastructure/web/LearningActivityControllerV3.java:143` | | `POST` | `/api/v3/learning-activity/interactive-video/events` | `recordInteractiveVideoEvent` | `backend/src/main/java/com/example/lms/learning_delivery/infrastructure/web/LearningActivityControllerV3.java:76` | | `POST` | `/api/v3/learning-activity/reading-progress` | `recordReadingProgress` | `backend/src/main/java/com/example/lms/learning_delivery/infrastructure/web/LearningActivityControllerV3.java:60` | | `GET` | `/api/v3/learning-activity/study-time/today` | `getTodayStudyTime` | `backend/src/main/java/com/example/lms/learning_delivery/infrastructure/web/LearningActivityControllerV3.java:132` | | `GET` | `/api/v3/learning-activity/study-time/trends` | `getStudyTimeTrends` | `backend/src/main/java/com/example/lms/learning_delivery/infrastructure/web/LearningActivityControllerV3.java:165` |
LessonVideoControllerV3 - 5 endpoint | Method | Endpoint | Handler | Source | | --- | --- | --- | --- | | `DELETE` | `/api/v3/lessons/{lessonId}/video` | `deleteVideo` | `backend/src/main/java/com/example/lms/learning_delivery/infrastructure/web/LessonVideoControllerV3.java:178` | | `POST` | `/api/v3/lessons/{lessonId}/video` | `uploadVideo` | `backend/src/main/java/com/example/lms/learning_delivery/infrastructure/web/LessonVideoControllerV3.java:45` | | `GET` | `/api/v3/lessons/{lessonId}/video/download` | `getDownloadUrl` | `backend/src/main/java/com/example/lms/learning_delivery/infrastructure/web/LessonVideoControllerV3.java:86` | | `GET` | `/api/v3/lessons/{lessonId}/video/play` | `getPlayUrl` | `backend/src/main/java/com/example/lms/learning_delivery/infrastructure/web/LessonVideoControllerV3.java:56` | | `GET` | `/api/v3/lessons/{lessonId}/video/sizes` | `getQualitySizes` | `backend/src/main/java/com/example/lms/learning_delivery/infrastructure/web/LessonVideoControllerV3.java:121` |
NoteControllerV3 - 4 endpoint | Method | Endpoint | Handler | Source | | --- | --- | --- | --- | | `GET` | `/api/v3/notes` | `listNotes` | `backend/src/main/java/com/example/lms/learning_delivery/infrastructure/web/NoteControllerV3.java:34` | | `POST` | `/api/v3/notes` | `createNote` | `backend/src/main/java/com/example/lms/learning_delivery/infrastructure/web/NoteControllerV3.java:56` | | `DELETE` | `/api/v3/notes/{id}` | `deleteNote` | `backend/src/main/java/com/example/lms/learning_delivery/infrastructure/web/NoteControllerV3.java:108` | | `PUT` | `/api/v3/notes/{id}` | `updateNote` | `backend/src/main/java/com/example/lms/learning_delivery/infrastructure/web/NoteControllerV3.java:82` |
OwnedClassContext - 3 endpoint | Method | Endpoint | Handler | Source | | --- | --- | --- | --- | | `GET` | `/api/v3/classes/{classId}/teachers` | `getClassTeachers` | `backend/src/main/java/com/example/lms/learning_delivery/infrastructure/web/ClassControllerV3.java:695` | | `POST` | `/api/v3/classes/{classId}/teachers` | `addClassTeacher` | `backend/src/main/java/com/example/lms/learning_delivery/infrastructure/web/ClassControllerV3.java:708` | | `DELETE` | `/api/v3/classes/{classId}/teachers/{teacherId}` | `removeClassTeacher` | `backend/src/main/java/com/example/lms/learning_delivery/infrastructure/web/ClassControllerV3.java:730` |
SectionVideoControllerV3 - 5 endpoint | Method | Endpoint | Handler | Source | | --- | --- | --- | --- | | `DELETE` | `/api/v3/sections/{sectionId}/video` | `deleteVideo` | `backend/src/main/java/com/example/lms/learning_delivery/infrastructure/web/SectionVideoControllerV3.java:194` | | `POST` | `/api/v3/sections/{sectionId}/video` | `uploadVideo` | `backend/src/main/java/com/example/lms/learning_delivery/infrastructure/web/SectionVideoControllerV3.java:49` | | `GET` | `/api/v3/sections/{sectionId}/video/download` | `getDownloadUrl` | `backend/src/main/java/com/example/lms/learning_delivery/infrastructure/web/SectionVideoControllerV3.java:91` | | `GET` | `/api/v3/sections/{sectionId}/video/play` | `getPlayUrl` | `backend/src/main/java/com/example/lms/learning_delivery/infrastructure/web/SectionVideoControllerV3.java:61` | | `GET` | `/api/v3/sections/{sectionId}/video/sizes` | `getQualitySizes` | `backend/src/main/java/com/example/lms/learning_delivery/infrastructure/web/SectionVideoControllerV3.java:137` |
StudentAnalyticsControllerV3 - 1 endpoint | Method | Endpoint | Handler | Source | | --- | --- | --- | --- | | `GET` | `/api/v3/student/analytics` | `getAnalytics` | `backend/src/main/java/com/example/lms/learning_delivery/infrastructure/web/StudentAnalyticsControllerV3.java:27` |
StudentEnrollmentControllerV3 - 13 endpoint | Method | Endpoint | Handler | Source | | --- | --- | --- | --- | | `GET` | `/api/v3/student/certificates` | `getStudentCertificates` | `backend/src/main/java/com/example/lms/learning_delivery/infrastructure/web/StudentEnrollmentControllerV3.java:608` | | `GET` | `/api/v3/student/certificates/{token}/verify` | `verifyCertificate` | `backend/src/main/java/com/example/lms/learning_delivery/infrastructure/web/StudentEnrollmentControllerV3.java:694` | | `POST` | `/api/v3/student/certificates/issue/{enrollmentId}` | `issueCertificate` | `backend/src/main/java/com/example/lms/learning_delivery/infrastructure/web/StudentEnrollmentControllerV3.java:636` | | `POST` | `/api/v3/student/courses/{courseId}/enroll` | `selfEnroll` | `backend/src/main/java/com/example/lms/learning_delivery/infrastructure/web/StudentEnrollmentControllerV3.java:251` | | `GET` | `/api/v3/student/courses/enrolled` | `getEnrolledCourses` | `backend/src/main/java/com/example/lms/learning_delivery/infrastructure/web/StudentEnrollmentControllerV3.java:76` | | `GET` | `/api/v3/student/grades` | `getStudentGrades` | `backend/src/main/java/com/example/lms/learning_delivery/infrastructure/web/StudentEnrollmentControllerV3.java:715` | | `GET` | `/api/v3/student/lessons/{lessonId}/progress` | `getLessonProgress` | `backend/src/main/java/com/example/lms/learning_delivery/infrastructure/web/StudentEnrollmentControllerV3.java:510` | | `GET` | `/api/v3/student/progress/courses/{courseId}` | `getCourseProgress` | `backend/src/main/java/com/example/lms/learning_delivery/infrastructure/web/StudentEnrollmentControllerV3.java:273` | | `GET` | `/api/v3/student/progress/courses/{courseId}/completed-ids` | `getCompletedLessonIds` | `backend/src/main/java/com/example/lms/learning_delivery/infrastructure/web/StudentEnrollmentControllerV3.java:327` | | `GET` | `/api/v3/student/progress/courses/{courseId}/next-lesson` | `getNextLesson` | `backend/src/main/java/com/example/lms/learning_delivery/infrastructure/web/StudentEnrollmentControllerV3.java:555` | | `POST` | `/api/v3/student/progress/lessons/{lessonId}/complete` | `markLessonComplete` | `backend/src/main/java/com/example/lms/learning_delivery/infrastructure/web/StudentEnrollmentControllerV3.java:359` | | `POST` | `/api/v3/student/progress/lessons/{lessonId}/sections/{sectionId}/complete` | `markSectionComplete` | `backend/src/main/java/com/example/lms/learning_delivery/infrastructure/web/StudentEnrollmentControllerV3.java:427` | | `POST` | `/api/v3/student/progress/recalculate` | `recalculateProgress` | `backend/src/main/java/com/example/lms/learning_delivery/infrastructure/web/StudentEnrollmentControllerV3.java:874` |
TeacherAnalyticsControllerV3 - 1 endpoint | Method | Endpoint | Handler | Source | | --- | --- | --- | --- | | `GET` | `/api/v3/teacher/analytics` | `getAnalytics` | `backend/src/main/java/com/example/lms/learning_delivery/infrastructure/web/TeacherAnalyticsControllerV3.java:25` |
TeacherInvitationControllerV3 - 3 endpoint | Method | Endpoint | Handler | Source | | --- | --- | --- | --- | | `GET` | `/api/v3/teacher/invitations` | `getInvitations` | `backend/src/main/java/com/example/lms/learning_delivery/infrastructure/web/TeacherInvitationControllerV3.java:32` | | `POST` | `/api/v3/teacher/invitations/{invitationId}/accept` | `acceptInvitation` | `backend/src/main/java/com/example/lms/learning_delivery/infrastructure/web/TeacherInvitationControllerV3.java:76` | | `POST` | `/api/v3/teacher/invitations/{invitationId}/reject` | `rejectInvitation` | `backend/src/main/java/com/example/lms/learning_delivery/infrastructure/web/TeacherInvitationControllerV3.java:113` |
TeacherStudentControllerV3 - 7 endpoint | Method | Endpoint | Handler | Source | | --- | --- | --- | --- | | `GET` | `/api/v3/teacher/students` | `getTeacherStudents` | `backend/src/main/java/com/example/lms/learning_delivery/infrastructure/web/TeacherStudentControllerV3.java:61` | | `GET` | `/api/v3/teacher/students/{studentId}` | `getStudentDetail` | `backend/src/main/java/com/example/lms/learning_delivery/infrastructure/web/TeacherStudentControllerV3.java:168` | | `GET` | `/api/v3/teacher/students/{studentId}/analytics` | `getStudentAnalytics` | `backend/src/main/java/com/example/lms/learning_delivery/infrastructure/web/TeacherStudentControllerV3.java:282` | | `GET` | `/api/v3/teacher/students/{studentId}/assignments` | `getStudentAssignments` | `backend/src/main/java/com/example/lms/learning_delivery/infrastructure/web/TeacherStudentControllerV3.java:237` | | `GET` | `/api/v3/teacher/students/{studentId}/export` | `exportStudentReport` | `backend/src/main/java/com/example/lms/learning_delivery/infrastructure/web/TeacherStudentControllerV3.java:372` | | `POST` | `/api/v3/teacher/students/{studentId}/messages` | `sendMessage` | `backend/src/main/java/com/example/lms/learning_delivery/infrastructure/web/TeacherStudentControllerV3.java:356` | | `PATCH` | `/api/v3/teacher/students/{studentId}/status` | `updateStudentStatus` | `backend/src/main/java/com/example/lms/learning_delivery/infrastructure/web/TeacherStudentControllerV3.java:322` |
VideoAssetControllerV3 - 8 endpoint | Method | Endpoint | Handler | Source | | --- | --- | --- | --- | | `GET` | `/api/v3/video-assets/{assetId}` | `getById` | `backend/src/main/java/com/example/lms/learning_delivery/infrastructure/web/VideoAssetControllerV3.java:49` | | `GET` | `/api/v3/video-assets/{assetId}/play` | `getPlayUrl` | `backend/src/main/java/com/example/lms/learning_delivery/infrastructure/web/VideoAssetControllerV3.java:60` | | `POST` | `/api/v3/video-assets/{assetId}/retry` | `retry` | `backend/src/main/java/com/example/lms/learning_delivery/infrastructure/web/VideoAssetControllerV3.java:76` | | `GET` | `/api/v3/video-assets/{assetId}/status` | `getAssetStatus` | `backend/src/main/java/com/example/lms/learning_delivery/infrastructure/web/VideoAssetControllerV3.java:126` | | `GET` | `/api/v3/video-assets/diagnostics/pipeline` | `pipelineDiagnostics` | `backend/src/main/java/com/example/lms/learning_delivery/infrastructure/web/VideoAssetControllerV3.java:87` | | `POST` | `/api/v3/video-assets/from-upload` | `createFromUpload` | `backend/src/main/java/com/example/lms/learning_delivery/infrastructure/web/VideoAssetControllerV3.java:34` | | `POST` | `/api/v3/video-assets/storage/orphan-cleanup` | `cleanupOrphanedStorage` | `backend/src/main/java/com/example/lms/learning_delivery/infrastructure/web/VideoAssetControllerV3.java:107` | | `GET` | `/api/v3/video-assets/storage/report` | `storageReport` | `backend/src/main/java/com/example/lms/learning_delivery/infrastructure/web/VideoAssetControllerV3.java:95` |
VideoProgressControllerV3 - 5 endpoint | Method | Endpoint | Handler | Source | | --- | --- | --- | --- | | `GET` | `/api/v3/video-progress/{sectionId}` | `getProgress` | `backend/src/main/java/com/example/lms/learning_delivery/infrastructure/web/VideoProgressControllerV3.java:50` | | `GET` | `/api/v3/video-progress/{sectionId}/can-proceed` | `canProceed` | `backend/src/main/java/com/example/lms/learning_delivery/infrastructure/web/VideoProgressControllerV3.java:72` | | `GET` | `/api/v3/video-progress/{sectionId}/resume` | `getResumePosition` | `backend/src/main/java/com/example/lms/learning_delivery/infrastructure/web/VideoProgressControllerV3.java:83` | | `GET` | `/api/v3/video-progress/lesson/{lessonId}` | `getLessonProgress` | `backend/src/main/java/com/example/lms/learning_delivery/infrastructure/web/VideoProgressControllerV3.java:61` | | `POST` | `/api/v3/video-progress/track` | `trackSegments` | `backend/src/main/java/com/example/lms/learning_delivery/infrastructure/web/VideoProgressControllerV3.java:30` |
will - 3 endpoint | Method | Endpoint | Handler | Source | | --- | --- | --- | --- | | `POST` | `/api/v3/classes/{classId}/enrollments` | `enrollStudent` | `backend/src/main/java/com/example/lms/learning_delivery/infrastructure/web/ClassControllerV3.java:412` | | `DELETE` | `/api/v3/classes/{classId}/enrollments/{studentId}` | `removeStudent` | `backend/src/main/java/com/example/lms/learning_delivery/infrastructure/web/ClassControllerV3.java:455` | | `GET` | `/api/v3/classes/{classId}/students` | `getClassStudents` | `backend/src/main/java/com/example/lms/learning_delivery/infrastructure/web/ClassControllerV3.java:436` |

Shared infrastructure (71)

AdminRevenueControllerV3 - 4 endpoint | Method | Endpoint | Handler | Source | | --- | --- | --- | --- | | `GET` | `/api/v3/admin/revenue/payouts` | `listPayouts` | `backend/src/main/java/com/example/lms/shared/infrastructure/web/AdminRevenueControllerV3.java:45` | | `POST` | `/api/v3/admin/revenue/payouts/{id}/approve` | `approve` | `backend/src/main/java/com/example/lms/shared/infrastructure/web/AdminRevenueControllerV3.java:68` | | `POST` | `/api/v3/admin/revenue/payouts/{id}/complete` | `complete` | `backend/src/main/java/com/example/lms/shared/infrastructure/web/AdminRevenueControllerV3.java:92` | | `POST` | `/api/v3/admin/revenue/payouts/{id}/reject` | `reject` | `backend/src/main/java/com/example/lms/shared/infrastructure/web/AdminRevenueControllerV3.java:80` |
AdminSettingsControllerV3 - 2 endpoint | Method | Endpoint | Handler | Source | | --- | --- | --- | --- | | `GET` | `/api/v3/admin/settings` | `getSettings` | `backend/src/main/java/com/example/lms/shared/infrastructure/web/AdminSettingsControllerV3.java:21` | | `PUT` | `/api/v3/admin/settings` | `updateSettings` | `backend/src/main/java/com/example/lms/shared/infrastructure/web/AdminSettingsControllerV3.java:28` |
AdminStorageControllerV3 - 3 endpoint | Method | Endpoint | Handler | Source | | --- | --- | --- | --- | | `GET` | `/api/v3/admin/storage/health` | `health` | `backend/src/main/java/com/example/lms/shared/infrastructure/web/AdminStorageControllerV3.java:52` | | `GET` | `/api/v3/admin/storage/orphans` | `listPendingReview` | `backend/src/main/java/com/example/lms/shared/infrastructure/web/AdminStorageControllerV3.java:75` | | `POST` | `/api/v3/admin/storage/orphans/{id}/release` | `releaseOrphan` | `backend/src/main/java/com/example/lms/shared/infrastructure/web/AdminStorageControllerV3.java:87` |
alert - 3 endpoint | Method | Endpoint | Handler | Source | | --- | --- | --- | --- | | `POST` | `/api/v3/integration/alerts` | `receiveAlert` | `backend/src/main/java/com/example/lms/shared/integration/WiiiDataControllerV3.java:344` | | `GET` | `/api/v3/integration/alerts/course/{courseId}` | `getCourseAlerts` | `backend/src/main/java/com/example/lms/shared/integration/WiiiDataControllerV3.java:399` | | `GET` | `/api/v3/integration/insights/{studentId}` | `getStudentInsights` | `backend/src/main/java/com/example/lms/shared/integration/WiiiDataControllerV3.java:381` |
AuditLogControllerV3 - 2 endpoint | Method | Endpoint | Handler | Source | | --- | --- | --- | --- | | `GET` | `/api/v3/admin/audit-logs` | `getAuditLogs` | `backend/src/main/java/com/example/lms/shared/infrastructure/web/AuditLogControllerV3.java:34` | | `GET` | `/api/v3/admin/audit-logs/{id}` | `getAuditLogDetail` | `backend/src/main/java/com/example/lms/shared/infrastructure/web/AuditLogControllerV3.java:68` |
BookmarkControllerV3 - 4 endpoint | Method | Endpoint | Handler | Source | | --- | --- | --- | --- | | `GET` | `/api/v3/bookmarks` | `listBookmarks` | `backend/src/main/java/com/example/lms/shared/infrastructure/web/BookmarkControllerV3.java:40` | | `POST` | `/api/v3/bookmarks` | `createBookmark` | `backend/src/main/java/com/example/lms/shared/infrastructure/web/BookmarkControllerV3.java:63` | | `DELETE` | `/api/v3/bookmarks/{id}` | `deleteBookmark` | `backend/src/main/java/com/example/lms/shared/infrastructure/web/BookmarkControllerV3.java:123` | | `PUT` | `/api/v3/bookmarks/{id}` | `updateBookmark` | `backend/src/main/java/com/example/lms/shared/infrastructure/web/BookmarkControllerV3.java:96` |
ClientTelemetryControllerV3 - 3 endpoint | Method | Endpoint | Handler | Source | | --- | --- | --- | --- | | `GET` | `/api/v3/admin/client-telemetry/offline-storage` | `listOfflineStorageTelemetry` | `backend/src/main/java/com/example/lms/shared/infrastructure/web/ClientTelemetryControllerV3.java:59` | | `GET` | `/api/v3/admin/client-telemetry/offline-storage/analytics` | `getOfflineStorageTelemetryAnalytics` | `backend/src/main/java/com/example/lms/shared/infrastructure/web/ClientTelemetryControllerV3.java:91` | | `POST` | `/api/v3/client-telemetry/offline-storage` | `recordOfflineStorageTelemetry` | `backend/src/main/java/com/example/lms/shared/infrastructure/web/ClientTelemetryControllerV3.java:48` |
DocumentPreviewControllerV3 - 1 endpoint | Method | Endpoint | Handler | Source | | --- | --- | --- | --- | | `POST` | `/api/v3/document-previews` | `requestPreview` | `backend/src/main/java/com/example/lms/shared/infrastructure/web/DocumentPreviewControllerV3.java:30` |
FileUploadControllerV3 - 8 endpoint | Method | Endpoint | Handler | Source | | --- | --- | --- | --- | | `DELETE` | `/api/v3/files` | `deleteFile` | `backend/src/main/java/com/example/lms/shared/infrastructure/web/FileUploadControllerV3.java:242` | | `POST` | `/api/v3/files/upload` | `uploadGeneral` | `backend/src/main/java/com/example/lms/shared/infrastructure/web/FileUploadControllerV3.java:148` | | `POST` | `/api/v3/files/upload/confirm` | `confirmUpload` | `backend/src/main/java/com/example/lms/shared/infrastructure/web/FileUploadControllerV3.java:346` | | `POST` | `/api/v3/files/upload/editor` | `uploadForEditor` | `backend/src/main/java/com/example/lms/shared/infrastructure/web/FileUploadControllerV3.java:93` | | `POST` | `/api/v3/files/upload/init` | `initUpload` | `backend/src/main/java/com/example/lms/shared/infrastructure/web/FileUploadControllerV3.java:301` | | `POST` | `/api/v3/files/upload/multipart/complete` | `completeMultipartUpload` | `backend/src/main/java/com/example/lms/shared/infrastructure/web/FileUploadControllerV3.java:419` | | `POST` | `/api/v3/files/upload/multipart/part-url` | `createMultipartPartUrl` | `backend/src/main/java/com/example/lms/shared/infrastructure/web/FileUploadControllerV3.java:381` | | `POST` | `/api/v3/files/upload/video` | `uploadVideo` | `backend/src/main/java/com/example/lms/shared/infrastructure/web/FileUploadControllerV3.java:188` |
OrgPaymentConfigControllerV3 - 2 endpoint | Method | Endpoint | Handler | Source | | --- | --- | --- | --- | | `GET` | `/api/v3/organizations/{orgId}/payment-config` | `getConfig` | `backend/src/main/java/com/example/lms/shared/infrastructure/web/OrgPaymentConfigControllerV3.java:35` | | `PUT` | `/api/v3/organizations/{orgId}/payment-config` | `upsertConfig` | `backend/src/main/java/com/example/lms/shared/infrastructure/web/OrgPaymentConfigControllerV3.java:45` |
PaymentControllerV3 - 15 endpoint | Method | Endpoint | Handler | Source | | --- | --- | --- | --- | | `POST` | `/api/v3/payments/admin/{paymentId}/refund` | `adminRefundPayment` | `backend/src/main/java/com/example/lms/shared/infrastructure/web/PaymentControllerV3.java:565` | | `GET` | `/api/v3/payments/admin/all` | `adminListPayments` | `backend/src/main/java/com/example/lms/shared/infrastructure/web/PaymentControllerV3.java:514` | | `GET` | `/api/v3/payments/admin/gateway-status` | `getGatewayStatus` | `backend/src/main/java/com/example/lms/shared/infrastructure/web/PaymentControllerV3.java:599` | | `GET` | `/api/v3/payments/available-methods` | `getAvailablePaymentMethods` | `backend/src/main/java/com/example/lms/shared/infrastructure/web/PaymentControllerV3.java:494` | | `GET` | `/api/v3/payments/by-ref/{txnRef}` | `getPaymentByTxnRef` | `backend/src/main/java/com/example/lms/shared/infrastructure/web/PaymentControllerV3.java:258` | | `GET` | `/api/v3/payments/can-access/{courseId}/lesson/{lessonIndex}` | `canAccessLesson` | `backend/src/main/java/com/example/lms/shared/infrastructure/web/PaymentControllerV3.java:225` | | `POST` | `/api/v3/payments/checkout` | `checkout` | `backend/src/main/java/com/example/lms/shared/infrastructure/web/PaymentControllerV3.java:94` | | `GET` | `/api/v3/payments/my-payments` | `getMyPayments` | `backend/src/main/java/com/example/lms/shared/infrastructure/web/PaymentControllerV3.java:191` | | `POST` | `/api/v3/payments/sepay/create-qr` | `createSepayQr` | `backend/src/main/java/com/example/lms/shared/infrastructure/web/PaymentControllerV3.java:394` | | `GET` | `/api/v3/payments/sepay/poll/{txnId}` | `pollSepayPayment` | `backend/src/main/java/com/example/lms/shared/infrastructure/web/PaymentControllerV3.java:463` | | `POST` | `/api/v3/payments/sepay/webhook` | `sepayWebhook` | `backend/src/main/java/com/example/lms/shared/infrastructure/web/PaymentControllerV3.java:430` | | `GET` | `/api/v3/payments/status/{courseId}` | `getPaymentStatus` | `backend/src/main/java/com/example/lms/shared/infrastructure/web/PaymentControllerV3.java:141` | | `GET` | `/api/v3/payments/vnpay-ipn` | `vnpayIpn` | `backend/src/main/java/com/example/lms/shared/infrastructure/web/PaymentControllerV3.java:354` | | `GET` | `/api/v3/payments/vnpay-return` | `vnpayReturn` | `backend/src/main/java/com/example/lms/shared/infrastructure/web/PaymentControllerV3.java:376` | | `POST` | `/api/v3/payments/vnpay/create-url` | `createVnPayUrl` | `backend/src/main/java/com/example/lms/shared/infrastructure/web/PaymentControllerV3.java:302` |
SecurityReportControllerV3 - 1 endpoint | Method | Endpoint | Handler | Source | | --- | --- | --- | --- | | `POST` | `/api/v3/security/csp-report` | `recordCspReport` | `backend/src/main/java/com/example/lms/shared/infrastructure/web/SecurityReportControllerV3.java:29` |
SyncControllerV3 - 3 endpoint | Method | Endpoint | Handler | Source | | --- | --- | --- | --- | | `GET` | `/api/v3/sync/pull` | `pullChanges` | `backend/src/main/java/com/example/lms/shared/infrastructure/web/SyncControllerV3.java:42` | | `POST` | `/api/v3/sync/push` | `pushChanges` | `backend/src/main/java/com/example/lms/shared/infrastructure/web/SyncControllerV3.java:30` | | `GET` | `/api/v3/sync/status` | `getSyncStatus` | `backend/src/main/java/com/example/lms/shared/infrastructure/web/SyncControllerV3.java:54` |
TeacherBankAccountControllerV3 - 4 endpoint | Method | Endpoint | Handler | Source | | --- | --- | --- | --- | | `GET` | `/api/v3/teacher/bank-accounts` | `list` | `backend/src/main/java/com/example/lms/shared/infrastructure/web/TeacherBankAccountControllerV3.java:30` | | `POST` | `/api/v3/teacher/bank-accounts` | `add` | `backend/src/main/java/com/example/lms/shared/infrastructure/web/TeacherBankAccountControllerV3.java:38` | | `DELETE` | `/api/v3/teacher/bank-accounts/{id}` | `delete` | `backend/src/main/java/com/example/lms/shared/infrastructure/web/TeacherBankAccountControllerV3.java:57` | | `PUT` | `/api/v3/teacher/bank-accounts/{id}/set-default` | `setDefault` | `backend/src/main/java/com/example/lms/shared/infrastructure/web/TeacherBankAccountControllerV3.java:48` |
TeacherRevenueControllerV3 - 6 endpoint | Method | Endpoint | Handler | Source | | --- | --- | --- | --- | | `DELETE` | `/api/v3/teacher/payout/{id}` | `cancelPayout` | `backend/src/main/java/com/example/lms/shared/infrastructure/web/TeacherRevenueControllerV3.java:87` | | `GET` | `/api/v3/teacher/payout/balance` | `getBalance` | `backend/src/main/java/com/example/lms/shared/infrastructure/web/TeacherRevenueControllerV3.java:51` | | `GET` | `/api/v3/teacher/payout/history` | `getPayoutHistory` | `backend/src/main/java/com/example/lms/shared/infrastructure/web/TeacherRevenueControllerV3.java:60` | | `POST` | `/api/v3/teacher/payout/request` | `requestPayout` | `backend/src/main/java/com/example/lms/shared/infrastructure/web/TeacherRevenueControllerV3.java:71` | | `GET` | `/api/v3/teacher/revenue/history` | `getHistory` | `backend/src/main/java/com/example/lms/shared/infrastructure/web/TeacherRevenueControllerV3.java:40` | | `GET` | `/api/v3/teacher/revenue/summary` | `getSummary` | `backend/src/main/java/com/example/lms/shared/infrastructure/web/TeacherRevenueControllerV3.java:31` |
WiiiCourseGenerationController - 2 endpoint | Method | Endpoint | Handler | Source | | --- | --- | --- | --- | | `POST` | `/api/v3/integration/courses/generate` | `createCourseShell` | `backend/src/main/java/com/example/lms/shared/integration/WiiiCourseGenerationController.java:39` | | `POST` | `/api/v3/integration/courses/generate/{courseId}/chapters` | `pushChapter` | `backend/src/main/java/com/example/lms/shared/integration/WiiiCourseGenerationController.java:48` |
WiiiDataControllerV3 - 8 endpoint | Method | Endpoint | Handler | Source | | --- | --- | --- | --- | | `GET` | `/api/v3/integration/courses/{courseId}/stats` | `getCourseStats` | `backend/src/main/java/com/example/lms/shared/integration/WiiiDataControllerV3.java:251` | | `GET` | `/api/v3/integration/courses/{courseId}/students` | `getCourseStudents` | `backend/src/main/java/com/example/lms/shared/integration/WiiiDataControllerV3.java:222` | | `POST` | `/api/v3/integration/insights` | `receiveInsight` | `backend/src/main/java/com/example/lms/shared/integration/WiiiDataControllerV3.java:315` | | `GET` | `/api/v3/integration/students/{userId}/assignments/upcoming` | `getUpcomingAssignments` | `backend/src/main/java/com/example/lms/shared/integration/WiiiDataControllerV3.java:146` | | `GET` | `/api/v3/integration/students/{userId}/enrollments` | `getStudentEnrollments` | `backend/src/main/java/com/example/lms/shared/integration/WiiiDataControllerV3.java:116` | | `GET` | `/api/v3/integration/students/{userId}/grades` | `getStudentGrades` | `backend/src/main/java/com/example/lms/shared/integration/WiiiDataControllerV3.java:84` | | `GET` | `/api/v3/integration/students/{userId}/profile` | `getStudentProfile` | `backend/src/main/java/com/example/lms/shared/integration/WiiiDataControllerV3.java:47` | | `GET` | `/api/v3/integration/students/{userId}/quiz-history` | `getQuizHistory` | `backend/src/main/java/com/example/lms/shared/integration/WiiiDataControllerV3.java:180` |