12 KiB
12 KiB
🛠️ Web Development Documentation: e-Learning Platform (Frontend)
เอกสารฉบับนี้สรุปรายละเอียดทางเทคนิค โครงสร้างโค้ด และการทำงานของระบบ Frontend-Learner
🏗️ 1. Technical Foundation (รากฐานทางเทคนิค)
รวมข้อมูลเครื่องมือ, ระบบความปลอดภัย และประสิทธิภาพการทำงานไว้ด้วยกัน
1.1 Tech Stack
- Core: Nuxt 3 (Vue 3 Composition API), TypeScript
^5.0 - Styling: Tailwind CSS (Utility) + Vanilla CSS Variables (Theming)
- State:
ref/reactive(Local) +useState(Global/Shared State) - Localization:
@nuxtjs/i18n(TH/EN Support)
1.2 Core Systems & Security
- Authentication: ระบบ Auth ผูกกับ API โดยมี Middleware (
middleware/auth.ts) คอยป้องกันการเข้าถึง Route เฉพาะ - API Handling: ใช้
runtimeConfig.public.apiBaseจัดการ Base URL และ Auto-attach Bearer Token ใน Composables - Performance:
- Caching: ใช้
useStateจำข้อมูล (User Profile, Courses, Categories) เพื่อลด request ซ้ำซ้อน - Request Deduping: ป้องกันการเรียก API เดิมซ้ำๆ ในเวลาเดียวกัน
- Caching: ใช้
📂 2. Frontend Structure (โครงสร้างหน้าเว็บและ UI)
2.1 Application Routes (pages/)
| Module | ไฟล์ | Path | หน้าที่ |
|---|---|---|---|
| Public | index.vue |
/ |
หน้าแรก Landing Page |
browse/index.vue |
/browse |
หน้ารวมคอร์สทั้งหมด | |
browse/discovery.vue |
/browse/discovery |
ระบบค้นหาและ Filter | |
course/[id].vue |
/course/:id |
หน้ารายละเอียดคอร์ส | |
| Auth | auth/login.vue |
/auth/login |
เข้าสู่ระบบ |
auth/register.vue |
/auth/register |
สมัครสมาชิกผู้เรียน | |
| Student | dashboard/index.vue |
/dashboard |
แดชบอร์ดภาพรวม |
dashboard/my-courses.vue |
/dashboard/my-courses |
คอร์สของฉัน | |
classroom/learning.vue |
/classroom/learning |
ห้องเรียน (Video Player) | |
classroom/quiz.vue |
/classroom/quiz |
การสอบวัดผล |
2.2 Reusable Components (components/)
- Layout:
AppHeader.vue,AppSidebar.vue,MobileNav.vue(Navigation หลัก) - Common:
FormInput.vue(ฟอร์ม),LoadingSpinner.vue(สถานะโหลด),LanguageSwitcher.vue(เปลี่ยนภาษา) - Modules:
CourseCard.vue(แสดงผลคอร์สแบบ Grid),UserAvatar.vue(รูปโปรไฟล์)
🧠 3. Logic & Data Layer (Composables + API)
รวบรวม Logic และ API Endpoint ที่เกี่ยวข้องไว้ในที่เดียวเพื่อความเข้าใจง่าย
3.1 useAuth.ts (Authentication & User)
จัดการสถานะผู้ใช้, ล็อกอิน, และข้อมูลส่วนตัว
- Endpoints:
GET /api/user/me: ดึงข้อมูลโปรไฟล์ (Cached)PUT /api/user/me: อัปเดตข้อมูลส่วนตัวPOST /api/user/change-password: เปลี่ยนรหัสผ่านPOST /api/user/upload-avatar: อัปโหลดรูปโปรไฟล์
3.2 useCourse.ts (Course & Learning)
หัวใจหลักของการเรียนการสอน ตั้งแต่หน้ารายการคอร์สจนถึงห้องเรียน
- Course Catalog Endpoints:
GET /api/courses: ดึงคอร์สทั้งหมด (Cached)GET /api/courses/{id}: ดึงรายละเอียดคอร์สPOST /api/students/courses/{id}/enroll: ลงทะเบียนเรียน
- Classroom Endpoints:
GET /api/students/courses: ดึง "คอร์สของฉัน"GET /api/students/courses/{id}/learn: ดึงโครงสร้างบทเรียน (Syllabus)GET /api/students/courses/{id}/lessons/{lessonId}: ดึงวิดีโอเนื้อหาGET /api/students/courses/{id}/lessons/{lessonId}/access-check: ตรวจสอบสิทธิ์การเข้าถึงบทเรียนPOST /api/students/lessons/{lessonId}/progress: บันทึกเวลาเรียน (Video Progress)GET /api/students/lessons/{lessonId}/progress: ดึงเวลาเรียนล่าสุดPOST /api/students/courses/{id}/lessons/{lessonId}/complete: บันทึกว่าเรียนจบแล้วPOST /api/students/courses/{id}/lessons/{lessonId}/quiz/submit: ส่งคำตอบแบบทดสอบ (Quiz)
3.3 useCategory.ts & Utilities
fetchCategories: ดึงหมวดหมู่ (GET /api/categories) สำหรับตัวกรองหน้า DiscoveryuseFormValidation.ts: รวม RegEx สำหรับตรวจสอบ Email, Password เบื้องต้น
🎨 4. Design System & Theming
4.1 Dark Mode Strategy
ระบบใช้ Class-based Dark Mode ของ Tailwind ผสมกับ CSS Variables:
- Backgrounds:
bg-slate-50(Light) vsbg-slate-900(Dark) - Text Visibility Rule (New):
- ใช้ Utility Classes ระบุสีตรงๆ แทนตัวแปร CSS ในจุดสำคัญเพื่อป้องกันสีเพี้ยน
- Ex:
<h1 class="text-slate-900 dark:text-white">
- Fonts: Prompt (Headings), Sarabun (Body)
6. Dependency Map & Relationships (แผนผังความสัมพันธ์ไฟล์)
ส่วนนี้ใช้อ้างอิงเวลาแก้ไขโค้ด เพื่อดูว่าไฟล์ไหนเชื่อมโยงหรือถูกเรียกใช้โดยไฟล์ใดบ้าง (Impact Analysis)
6.1 Page Dependencies (หน้าเว็บหลักใช้อะไรบ้าง)
| Page (หน้าเว็บ) | Components used (ส่วนประกอบที่ใช้) | Composables used (Logic & API ที่ใช้) |
|---|---|---|
pages/index.vue (Landing) |
LandingHeader, CourseCard |
useAuth, useCourse (fetchCourses) |
pages/browse/discovery.vue |
CourseCard, FormInput, LoadingSpinner |
useCategory (Filter), useCourse (Search/List) |
pages/course/[id].vue |
LoadingSpinner, UserAvatar (Instructor) |
useCourse (Detail, Enroll), useAuth (User Status) |
pages/classroom/learning.vue |
AppSidebar (Curriculum), GlobalLoader |
useCourse (Video, Progress), useThemeMode |
pages/dashboard/index.vue |
CourseCard (Recommended), UserAvatar |
useAuth (Profile), useCourse (My Courses) |
pages/auth/*.vue (Login/Reg) |
FormInput, LanguageSwitcher |
useAuth (Login/Register), useFormValidation |
6.2 Key Components Dependencies (Component นี้ถูกใช้ที่ไหน)
-
CourseCard.vueถูกใช้ใน:pages/index.vue(Recommended)pages/browse/index.vue(Catalog List)pages/browse/discovery.vue(Search Result)pages/dashboard/index.vue(Dashboard Recommend)pages/dashboard/my-courses.vue(My Course List)
-
FormInput.vueถูกใช้ใน:pages/auth/*(Login, Register, Forgot Password)pages/dashboard/profile.vue(Edit Profile)
6.3 Composable Usage (Logic นี้ใครเรียกใช้บ้าง)
useAuth.ts-> ถูกเรียกใช้เกือบทุกหน้าที่มีการเช็ค User, Logout, หรือแสดงชื่อuseCourse.ts-> ถูกเรียกใช้ในหน้า Browse, Course Detail, Classroom, DashboarduseThemeMode.ts-> ถูกเรียกใช้ในlayouts/default.vueเพื่อคุม Theme ทั้งเว็บ
<EFBFBD>📊 7. Project Status (สถานะการพัฒนา)
✅ Completed Updates (สิ่งที่ทำเสร็จแล้ว)
- Code Cleanup: ลบไฟล์ขยะ (Mock Data pages) ออกจากระบบ
- Theme Refinement: แก้ไขปัญหาการแสดงผล Text Color ใน Light/Dark Mode หน้า
learning.vueและdiscovery.vueเสร็จสมบูรณ์ - API Integration: เชื่อมต่อระบบหลักครบถ้วน (Auth, Course, Enroll, Learning Progress)
- Localization: รองรับภาษาไทยสมบูรณ์พร้อมคำอธิบายโค้ด
- Profile Avatar: ระบบอัปโหลดรูปโปรไฟล์จริง (
/api/user/upload-avatar) พร้อมแสดงผลทันทีแบบ Real-time และการจัดการสถานะ (Upload/Change) - Quiz System Integrations:
- เชื่อมต่อ API ส่งคำตอบ (
/api/.../quiz/submit) และแสดงผลคะแนน - ระบบคำนวณคะแนนและสถานะ Pass/Fail จาก Server จริง
- แก้ไขปัญหา Cache ฯ หน้าเรียน (
learning.vue) ให้แสดงสถานะ "เรียนจบ" (✅) ทันทีที่สอบผ่าน โดยใช้ Timestamp Query (?_t=...) และ Watcher Logic
- เชื่อมต่อ API ส่งคำตอบ (
- UX/UI Improvements (My Courses & Enroll):
- My Courses: แสดง Progress Bar ถูกต้อง (ดึง
progress_percentage) และปรับ Filter "กำลังเรียน" ให้แสดงคอร์สใหม่ (ENROLLED) ด้วย - Enrollment Flow: แก้ไขปุ่ม "เริ่มเรียนทันที" ใน Modal ให้ลิงก์ไปยังคอร์สที่ถูกต้อง (ส่ง
course_idparam) - Auth: เพิ่มฟังก์ชัน "จดจำฉัน" (Remember Me) ในหน้า Login เพื่อจำ Email ผู้ใช้
- My Courses: แสดง Progress Bar ถูกต้อง (ดึง
🚀 Pending / Future Work (สิ่งที่ต้องทำต่อ)
- Certificates: ระบบดาวน์โหลดใบประกาศนียบัตร (ข้อมูล Backend พร้อมแล้ว รอเชื่อมต่อ UI)
- Payment Gateway: (ถ้ามีในอนาคต)