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
|
||||
}
|
||||
|
||||
// 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
|
||||
// หน้าที่: จัดการ 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 {
|
||||
fetchCourses,
|
||||
fetchCourseById,
|
||||
|
|
@ -404,7 +469,8 @@ export const useCourse = () => {
|
|||
checkLessonAccess,
|
||||
saveVideoProgress,
|
||||
fetchVideoProgress,
|
||||
markLessonComplete
|
||||
markLessonComplete,
|
||||
submitQuiz
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue