feat: derive course durations from video media
This commit is contained in:
@@ -64,6 +64,12 @@ const toDuration = (seconds: number | null) => {
|
||||
return minutes >= 60 ? `${Math.floor(minutes / 60)}h ${minutes % 60}m` : `${minutes}m`;
|
||||
};
|
||||
|
||||
const toCourseDuration = (lessons: ApiCourse['lessons']) => {
|
||||
const seconds = lessons.reduce((total, lesson) => total + (lesson.media[0]?.durationSeconds ?? lesson.durationSeconds ?? 0), 0);
|
||||
if (seconds) return toDuration(seconds);
|
||||
return lessons.length ? 'Processando' : '—';
|
||||
};
|
||||
|
||||
const toCourse = (course: ApiCourse): Course => ({
|
||||
id: course.id,
|
||||
title: course.title,
|
||||
@@ -77,7 +83,7 @@ const toCourse = (course: ApiCourse): Course => ({
|
||||
status: course.status === 'draft' ? 'draft' : 'published',
|
||||
progress: course.progress,
|
||||
lastActivity: course.lastActivity || undefined,
|
||||
duration: `${course.lessons.length} Aulas`,
|
||||
duration: toCourseDuration(course.lessons),
|
||||
lessons: course.lessons.map((lesson): Lesson => {
|
||||
const media: LessonMedia[] = lesson.media.map((item) => ({
|
||||
id: item.id,
|
||||
@@ -92,7 +98,7 @@ const toCourse = (course: ApiCourse): Course => ({
|
||||
id: lesson.id,
|
||||
title: lesson.title,
|
||||
description: lesson.description,
|
||||
duration: toDuration(lesson.durationSeconds),
|
||||
duration: toDuration(media[0]?.durationSeconds ?? lesson.durationSeconds),
|
||||
isFree: lesson.accessLevel === 'public',
|
||||
videoUrl: media[0]?.playbackUrl || media[0]?.embedUrl || '',
|
||||
mediaProvider: media[0]?.provider,
|
||||
@@ -139,7 +145,7 @@ const toCoursePayload = (course: Course) => ({
|
||||
id: /^[0-9a-f]{8}-[0-9a-f-]{27}$/i.test(lesson.id) ? lesson.id : undefined,
|
||||
title: lesson.title,
|
||||
description: lesson.description || '',
|
||||
durationSeconds: toSeconds(lesson.duration),
|
||||
durationSeconds: lesson.media?.[0]?.durationSeconds ?? toSeconds(lesson.duration),
|
||||
accessLevel: lesson.isFree ? 'public' as const : 'enrolled' as const,
|
||||
media: lesson.media?.length
|
||||
? lesson.media.map((media) => ({
|
||||
|
||||
Reference in New Issue
Block a user