Vị trí file code
Trang này trả lời câu hỏi thực dụng: “muốn sửa phần này thì mở file nào trước?”. Full index có ở Full File CodeMap, còn trang này là bản curated để thao tác nhanh.
Quy tắc tìm file trong repo
cd E:\Sach\Sua\LMS_hohulili
rg --files | rg "CourseAuthoringControllerV3|course-editor.store|PaymentControllerV3"
rg -n "submit-for-approval|data-wiii-click-safe|payment_transactions" backend fe docs-site
| Muốn tìm | Lệnh nhanh |
|---|---|
| Class Java | rg -n "class CourseAuthoringControllerV3" backend/src/main/java |
| Angular component | rg --files fe/src/app | rg "course-learning.component" |
| Endpoint backend | rg -n "@(Get|Post|Put|Patch|Delete)Mapping|RequestMapping" backend/src/main/java |
| API frontend | rg -n "/api/v3/payments|PaymentController" fe/src/app backend/src/main/java |
| Bảng SQL | rg -n "CREATE TABLE.*payment_transactions|ALTER TABLE payment_transactions" backend/src/main/resources/db/migration |
| Text UI | rg -n "Thanh toán|Bài học|Duyệt" fe/src/app |
Bản đồ theo việc cần sửa
| Việc cần sửa/giải thích | Mở frontend trước | Mở backend trước | Mở database/docs |
|---|---|---|---|
| Login, register, token | fe/src/app/core/services/auth.service.ts, fe/src/app/api/endpoints/auth.endpoints.ts |
identity/infrastructure/web/AuthControllerV3.java, config/JwtAuthenticationFilter.java, config/SecurityConfig.java |
users, login_attempts, user_external_identities |
| Role/guard route | fe/src/app/core/guards/role.guard.ts, fe/src/app/app.routes.ts |
SecurityConfig.java, controller @PreAuthorize |
Roles và permission |
| UX/UI, đổi màu, đổi layout | Component .html/.scss của màn hình, UX/UI và design system |
Chỉ mở backend nếu logic/API/state thay đổi | Design token #0056D2, #004BB5, bg-slate-50, Toast/ConfirmDialog |
| Teacher dashboard | fe/src/app/features/teacher/dashboard/teacher-dashboard.component.*, teacher.routes.ts |
teacher/course/analytics controllers | courses, learning_classes, analytics views |
| Course editor shell | fe/src/app/features/teacher/course-editor/course-editor.routes.ts, course-editor.store.ts |
CourseAuthoringControllerV3.java, CourseAuthoringUseCase.java |
courses, chapters, lessons, sections |
| Curriculum/lesson content | course-curriculum components under fe/src/app/features/teacher/course-editor/pages |
CreateLessonUseCaseV3, UpdateLessonUseCase, ManageContentBlockUseCaseV3 |
lessons.content_blocks, lesson_attachments |
| Submit/approve course | teacher/admin course pages | CourseReviewUseCase, ApproveCourseUseCase, RejectCourseUseCase, CoursePublicationService |
course_publications, course_review_events |
| Student course detail | fe/src/app/features/courses/course-detail.component.*, fe/src/app/features/student/pages/course-detail.component.* |
CourseQueryControllerV3, enrollment/payment controllers |
courses, course_publications, enrollments |
| Learning page | fe/src/app/features/learning/pages/course-learning.component.* |
LearningActivityControllerV3, progress use cases |
student_lesson_progress, learning_events |
| Quiz teacher | fe/src/app/features/teacher/quiz, assignment-hub quiz components |
QuizControllerV3, QuestionControllerV3, QuestionBankControllerV3 |
quizzes, questions, quiz_questions, quiz_attempts |
| Quiz student | fe/src/app/features/student/quiz, fe/src/app/features/learning/quiz |
QuizControllerV3, student task/attempt APIs |
quiz_attempts, quiz_assignments |
| Assignment/grading | fe/src/app/features/teacher/assignments, assignment-hub, fe/src/app/features/student/assignments |
AssignmentControllerV3, AssignmentSubmissionControllerV3, RubricControllerV3 |
assignments, assignment_submissions, grading_audit_log |
| Payment/VNPay/SePay | fe/src/app/features/payment, fe/src/app/api/client/payment.api.ts |
PaymentControllerV3, ProcessVnPayIpnUseCase, ProcessSepayWebhookUseCase |
payment_transactions, revenue_splits, payout_requests |
| Revenue/payout | teacher revenue/admin revenue pages | TeacherRevenueControllerV3, AdminRevenueControllerV3, TeacherBankAccountControllerV3 |
teacher_bank_accounts, revenue_splits, payout_requests |
| Upload file | presigned-upload.service.ts, upload widgets/adapters |
PresignedUploadUseCase, FileUploadControllerV3, DocumentPreviewControllerV3 |
upload_sessions, file_attachments |
| Video ingest/playback | adaptive-video-player.component.ts, video block components |
VideoAssetControllerV3, VideoAssetIngestService, ShakaPackagerService, AdaptiveVideoPlaybackService |
video_assets, video_renditions, video_ingest_jobs, video_progress |
| Offline/PWA | course-download.service.ts, offline-video.service.ts, offline-sync.service.ts, lms-offline.db.ts |
sync/offline telemetry controllers | client_offline_storage_telemetry, IndexedDB |
| Wiii/AI iframe | fe/src/app/features/ai-chat/infrastructure/api/wiii-context.service.ts, chat-panel.component.ts |
AiAssistantControllerV3, AiTokenControllerV3, WiiiDataControllerV3, WiiiCourseGenerationController |
chat_sessions, chat_messages, ai_insights, ai_alerts |
| STCW competency | fe/src/app/features/teacher/competency-map/competency-map.component.* |
CompetencyMappingController, competency use cases |
maritime_standards, standard_competencies, lesson_competency_mappings |
| Message/announcement | fe/src/app/features/student/messages, shared message components |
CommunicationControllerV3, AnnouncementController |
conversations, messages, message_reactions, announcements |
| Admin settings/logs | fe/src/app/features/admin, system settings component |
AdminSettingsControllerV3, AuditLogControllerV3 |
admin_settings, audit_log |
Bản đồ backend theo module
| Module | Controller nên mở | Use case/service nên mở | Entity/bảng chính |
|---|---|---|---|
identity |
AuthControllerV3, user/org controllers |
AuthenticateUserUseCaseV2, RegisterUserUseCaseV2, UpdateUserUseCaseV3 |
UserJpaEntity, OrganizationJpaEntity, users, organizations |
course_authoring |
CourseAuthoringControllerV3, TeacherCoursesControllerV3, AdminCoursesControllerV3 |
CourseAuthoringUseCase, CourseDraftMutationUseCase, CoursePublicationService |
CourseJpaEntity, LessonJpaEntity, CoursePublicationJpaEntity |
learning_delivery |
StudentEnrollmentControllerV3, ClassControllerV3, LearningActivityControllerV3, VideoAssetControllerV3 |
SelfEnrollUseCase, UpdateLessonProgressUseCase, VideoAssetIngestService |
EnrollmentJpaEntity, LearningClassJpaEntity, VideoAssetJpaEntity |
assessment |
QuizControllerV3, AssignmentControllerV3, AssignmentSubmissionControllerV3, RubricControllerV3 |
quiz/assignment/rubric use cases and adapters | QuizJpaEntity, QuestionJpaEntity, AssignmentSubmissionJpaEntity |
communication |
CommunicationControllerV3, AnnouncementController |
message/announcement use cases | conversations, messages, announcements |
ai_assistant / Wiii |
AiAssistantControllerV3, AiTokenControllerV3, Wiii integration controllers |
WiiiChatAdapter, WiiiTokenExchangeAdapter, Wiii service auth |
chat_sessions, chat_messages, ai_insights |
competency_mapping |
CompetencyMappingController |
GetCourseCompetencyMapUseCase, UpdateLessonCompetenciesUseCase |
MaritimeStandardJpaEntity, StandardCompetencyJpaEntity |
shared |
PaymentControllerV3, FileUploadControllerV3, DocumentPreviewControllerV3 |
PresignedUploadUseCase, payment use cases, storage services |
payment_transactions, upload_sessions, file_attachments |
Bản đồ frontend theo feature
| Feature/folder | Vai trò | File nên mở trước |
|---|---|---|
fe/src/app/app.routes.ts |
Root route và lazy loading | Khi màn hình không mở hoặc guard sai |
fe/src/app/api |
API clients, endpoints, DTO types | Khi endpoint đổi hoặc cần thêm request/response |
fe/src/app/core |
Auth, guards, interceptors, offline, upload utilities | Khi lỗi cross-cutting toàn app |
fe/src/app/features/teacher |
Teacher dashboard, course editor, quiz, assignment, competency | Khi sửa workflow giảng viên |
fe/src/app/features/student |
Dashboard, detail, messages, payment history, assignment | Khi sửa workflow học viên |
fe/src/app/features/learning |
Runtime học bài, player, quiz learning | Khi sửa trải nghiệm học |
fe/src/app/features/admin |
Admin/ORG_ADMIN dashboard, course/user/settings | Khi sửa vận hành/quản trị |
fe/src/app/features/payment |
VNPay/SePay modal/callback/success/fail | Khi sửa thanh toán |
fe/src/app/features/ai-chat |
Wiii iframe, context bridge, preview/apply | Khi sửa AI assistant/Pointy |
fe/src/app/shared |
Component dùng lại, validators, blocks | Khi sửa UI dùng ở nhiều nơi |
Khi bị yêu cầu “đổi màu”
- Tìm component bằng route hoặc text UI.
- Mở
.scsscạnh component nếu có. - Nếu style inline trong template, sửa
.htmlnhưng nên đưa style phức tạp về.scss. - Giữ design token chính:
#0056D2, slate/gray neutral, màu đỏ chỉ cho lỗi/destructive. - Test desktop + mobile vì sidebar/table/card dễ vỡ khi text tiếng Việt dài.
Khi bị yêu cầu “đổi logic”
- Không sửa thẳng repository/JPA trước.
- Tìm controller nhận endpoint.
- Đi vào use case/service nghiệp vụ.
- Kiểm domain invariant: role, ownership, publication, payment truth, grade audit.
- Nếu cần đổi schema, tạo migration mới, không sửa migration cũ đã chạy.
- Thêm/sửa test theo blast radius.
Khi bị yêu cầu “thêm API”
| Bước | Việc làm |
|---|---|
| 1 | Tạo DTO/command/response trong application/dto nếu cần |
| 2 | Thêm use case hoặc mở rộng use case đúng module |
| 3 | Thêm method controller trong infrastructure/web |
| 4 | Nếu cần DB, thêm entity/mapper/repository adapter theo Clean Architecture |
| 5 | Thêm frontend endpoint/API client/type |
| 6 | Gọi từ component/store/service |
| 7 | Test backend + frontend build/smoke |
Khi bị yêu cầu “mở database”
Mở SQL schema catalog trước để biết bảng, rồi mới mở DBeaver. Với DBeaver, lọc schema public, nhớ bỏ qua flyway_schema_history khi nói số bảng nghiệp vụ.