|
|
|
@ -234,7 +234,10 @@ class CourseDetailSerializer(serializers.ModelSerializer): |
|
|
|
if student := self._get_authenticated_user(): |
|
|
|
if not self._is_participant(student, obj): |
|
|
|
return None |
|
|
|
return self._get_completed_lessons_count(student, obj) |
|
|
|
completed_count = self._get_completed_lessons_count(student, obj) |
|
|
|
# Ensure completed count doesn't exceed total lessons count |
|
|
|
total_lessons = self.get_lessons_count(obj) |
|
|
|
return min(completed_count, total_lessons) |
|
|
|
return None |
|
|
|
|
|
|
|
def _is_participant(self, student, course): |
|
|
|
@ -296,6 +299,7 @@ class CourseDetailSerializer(serializers.ModelSerializer): |
|
|
|
class MyCourseListSerializer(serializers.ModelSerializer): |
|
|
|
category = CourseCategorySerializer() |
|
|
|
thumbnail = serializers.SerializerMethodField() |
|
|
|
lessons_count = serializers.SerializerMethodField() |
|
|
|
lessons_complated_count = serializers.SerializerMethodField() |
|
|
|
|
|
|
|
class Meta: |
|
|
|
@ -315,11 +319,24 @@ class MyCourseListSerializer(serializers.ModelSerializer): |
|
|
|
def get_thumbnail(self, obj): |
|
|
|
return get_thumbs(obj.thumbnail, self.context.get('request')) |
|
|
|
|
|
|
|
def get_lessons_count(self, obj): |
|
|
|
"""Get the actual count of active lessons""" |
|
|
|
# Use prefetched lessons if available |
|
|
|
if hasattr(obj, 'lessons') and obj.lessons.all(): |
|
|
|
lessons_count = sum(1 for lesson in obj.lessons.all() if lesson.is_active) |
|
|
|
return max(lessons_count, obj.lessons_count) |
|
|
|
# Fallback to direct query |
|
|
|
lessons_count = obj.lessons.filter(is_active=True).count() |
|
|
|
return max(lessons_count, obj.lessons_count) |
|
|
|
|
|
|
|
def get_lessons_complated_count(self, obj): |
|
|
|
if student := self._get_authenticated_user(): |
|
|
|
if not self._is_participant(student, obj): |
|
|
|
return None |
|
|
|
return self._get_completed_lessons_count(student, obj) |
|
|
|
completed_count = self._get_completed_lessons_count(student, obj) |
|
|
|
# Ensure completed count doesn't exceed total lessons count |
|
|
|
total_lessons = self.get_lessons_count(obj) |
|
|
|
return min(completed_count, total_lessons) |
|
|
|
return None |
|
|
|
|
|
|
|
def _is_participant(self, student, course): |
|
|
|
|