feat: implement useCourse composable for managing course data, enrollment, and lesson progress.
This commit is contained in:
parent
e6549cda44
commit
897edb6438
1 changed files with 79 additions and 1 deletions
|
|
@ -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 {
|
return {
|
||||||
fetchCourses,
|
fetchCourses,
|
||||||
fetchCourseById,
|
fetchCourseById,
|
||||||
|
|
@ -242,7 +317,10 @@ export const useCourse = () => {
|
||||||
fetchEnrolledCourses,
|
fetchEnrolledCourses,
|
||||||
fetchCourseLearningInfo,
|
fetchCourseLearningInfo,
|
||||||
fetchLessonContent,
|
fetchLessonContent,
|
||||||
checkLessonAccess
|
checkLessonAccess,
|
||||||
|
saveVideoProgress,
|
||||||
|
fetchVideoProgress,
|
||||||
|
markLessonComplete
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue