feat: implement useCourse composable for managing course data, enrollment, and lesson progress.

This commit is contained in:
supalerk-ar66 2026-01-20 15:42:34 +07:00
parent e6549cda44
commit 897edb6438

View file

@ -235,6 +235,81 @@ export const useCourse = () => {
}
}
const saveVideoProgress = async (lessonId: number, progressSeconds: number, durationSeconds: number) => {
try {
const data = await $fetch<{ code: number; message: string; data: any }>(`${API_BASE_URL}/students/lessons/${lessonId}/progress`, {
method: 'POST',
headers: token.value ? {
Authorization: `Bearer ${token.value}`
} : {},
body: {
video_progress_seconds: progressSeconds,
video_duration_seconds: durationSeconds
}
})
return {
success: true,
data: data.data
}
} catch (err: any) {
console.error('Save video progress failed:', err)
return {
success: false,
error: err.data?.message || err.message || 'Error saving video progress',
code: err.data?.code
}
}
}
const fetchVideoProgress = async (lessonId: number) => {
try {
const data = await $fetch<{ code: number; message: string; data: any }>(`${API_BASE_URL}/students/lessons/${lessonId}/progress`, {
method: 'GET',
headers: token.value ? {
Authorization: `Bearer ${token.value}`
} : {}
})
return {
success: true,
data: data.data
}
} catch (err: any) {
console.error('Fetch video progress failed:', err)
return {
success: false,
error: err.data?.message || err.message || 'Error fetching video progress',
code: err.data?.code,
status: err.status
}
}
}
const markLessonComplete = async (courseId: number, lessonId: number) => {
try {
const data = await $fetch<{ code: number; message: string; data: any }>(`${API_BASE_URL}/students/courses/${courseId}/lessons/${lessonId}/complete`, {
method: 'POST',
headers: token.value ? {
Authorization: `Bearer ${token.value}`
} : {}
})
return {
success: true,
data: data.data
}
} catch (err: any) {
console.error('Mark lesson complete failed:', err)
return {
success: false,
error: err.data?.message || err.message || 'Error marking lesson as complete',
code: err.data?.code,
status: err.status
}
}
}
return {
fetchCourses,
fetchCourseById,
@ -242,7 +317,10 @@ export const useCourse = () => {
fetchEnrolledCourses,
fetchCourseLearningInfo,
fetchLessonContent,
checkLessonAccess
checkLessonAccess,
saveVideoProgress,
fetchVideoProgress,
markLessonComplete
}
}