feat: Add useCourse composable for course-related data and logic.
This commit is contained in:
parent
e9cdb0ddbe
commit
bacb8a3824
2 changed files with 72 additions and 2 deletions
|
|
@ -65,6 +65,38 @@ interface EnrolledCourseResponse {
|
||||||
limit: number
|
limit: number
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Interface สำหรับการส่งคำตอบแบบทดสอบ (Quiz Submission)
|
||||||
|
export interface QuizAnswerSubmission {
|
||||||
|
question_id: number
|
||||||
|
choice_id: number
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface QuizSubmitRequest {
|
||||||
|
answers: QuizAnswerSubmission[]
|
||||||
|
}
|
||||||
|
|
||||||
|
// Interface สำหรับผลลัพธ์การสอบ (Quiz Result)
|
||||||
|
export interface QuizResult {
|
||||||
|
answers_review: {
|
||||||
|
score: number
|
||||||
|
is_correct: boolean
|
||||||
|
correct_choice_id: number
|
||||||
|
selected_choice_id: number
|
||||||
|
question_id: number
|
||||||
|
}[]
|
||||||
|
completed_at: string
|
||||||
|
started_at: string
|
||||||
|
attempt_number: number
|
||||||
|
passing_score: number
|
||||||
|
is_passed: boolean
|
||||||
|
correct_answers: number
|
||||||
|
total_questions: number
|
||||||
|
total_score: number
|
||||||
|
score: number
|
||||||
|
quiz_id: number
|
||||||
|
attempt_id: number
|
||||||
|
}
|
||||||
|
|
||||||
// ==========================================
|
// ==========================================
|
||||||
// Composable: useCourse
|
// Composable: useCourse
|
||||||
// หน้าที่: จัดการ Logic ทุกอย่างเกี่ยวกับคอร์สเรียน
|
// หน้าที่: จัดการ Logic ทุกอย่างเกี่ยวกับคอร์สเรียน
|
||||||
|
|
@ -394,6 +426,39 @@ export const useCourse = () => {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// ฟังก์ชันส่งคำตอบ Quiz
|
||||||
|
// Endpoint: POST /students/courses/:cid/lessons/:lid/quiz/submit
|
||||||
|
const submitQuiz = async (courseId: number, lessonId: number, answers: QuizAnswerSubmission[]) => {
|
||||||
|
try {
|
||||||
|
const body: QuizSubmitRequest = { answers }
|
||||||
|
|
||||||
|
const data = await $fetch<{ code: number; message: string; data: QuizResult }>(`${API_BASE_URL}/students/courses/${courseId}/lessons/${lessonId}/quiz/submit`, {
|
||||||
|
method: 'POST',
|
||||||
|
headers: token.value ? {
|
||||||
|
Authorization: `Bearer ${token.value}`
|
||||||
|
} : {},
|
||||||
|
body: body
|
||||||
|
})
|
||||||
|
|
||||||
|
return {
|
||||||
|
success: true,
|
||||||
|
data: data.data
|
||||||
|
}
|
||||||
|
} catch (err: any) {
|
||||||
|
console.error('Submit quiz failed:', err)
|
||||||
|
return {
|
||||||
|
success: false,
|
||||||
|
error: err.data?.message || err.message || 'Error submitting quiz',
|
||||||
|
code: err.data?.code,
|
||||||
|
status: err.status
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
fetchCourses,
|
fetchCourses,
|
||||||
fetchCourseById,
|
fetchCourseById,
|
||||||
|
|
@ -404,7 +469,8 @@ export const useCourse = () => {
|
||||||
checkLessonAccess,
|
checkLessonAccess,
|
||||||
saveVideoProgress,
|
saveVideoProgress,
|
||||||
fetchVideoProgress,
|
fetchVideoProgress,
|
||||||
markLessonComplete
|
markLessonComplete,
|
||||||
|
submitQuiz
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -75,7 +75,11 @@
|
||||||
- `GET /api/students/courses`: ดึง "คอร์สของฉัน"
|
- `GET /api/students/courses`: ดึง "คอร์สของฉัน"
|
||||||
- `GET /api/students/courses/{id}/learn`: ดึงโครงสร้างบทเรียน (Syllabus)
|
- `GET /api/students/courses/{id}/learn`: ดึงโครงสร้างบทเรียน (Syllabus)
|
||||||
- `GET /api/students/courses/{id}/lessons/{lessonId}`: ดึงวิดีโอเนื้อหา
|
- `GET /api/students/courses/{id}/lessons/{lessonId}`: ดึงวิดีโอเนื้อหา
|
||||||
|
- `GET /api/students/courses/{id}/lessons/{lessonId}/access-check`: ตรวจสอบสิทธิ์การเข้าถึงบทเรียน
|
||||||
- `POST /api/students/lessons/{lessonId}/progress`: บันทึกเวลาเรียน (Video Progress)
|
- `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
|
### 3.3 `useCategory.ts` & Utilities
|
||||||
|
|
||||||
|
|
@ -98,7 +102,7 @@
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 6. Dependency Map & Relationships (แผนผังความสัมพันธ์ไฟล์)
|
## 6. Dependency Map & Relationships (แผนผังความสัมพันธ์ไฟล์)
|
||||||
|
|
||||||
ส่วนนี้ใช้อ้างอิงเวลาแก้ไขโค้ด เพื่อดูว่าไฟล์ไหนเชื่อมโยงหรือถูกเรียกใช้โดยไฟล์ใดบ้าง (Impact Analysis)
|
ส่วนนี้ใช้อ้างอิงเวลาแก้ไขโค้ด เพื่อดูว่าไฟล์ไหนเชื่อมโยงหรือถูกเรียกใช้โดยไฟล์ใดบ้าง (Impact Analysis)
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue