Browse Source

serializers and views added for livesessions for dashboard

master
Mohsen Taba 2 months ago
parent
commit
9ef4a55127
  1. 46
      apps/course/serializers/admin.py
  2. 1
      apps/course/urls.py
  3. 39
      apps/course/views/admin.py

46
apps/course/serializers/admin.py

@ -9,7 +9,10 @@ from apps.course.models import (
CourseAttachment,
Attachment,
CourseGlossary,
Glossary
Glossary,
CourseLiveSession,
LiveSessionUser,
LiveSessionRecording
)
from apps.account.models import ProfessorUser
@ -376,3 +379,44 @@ class AdminCourseGlossarySerializer(serializers.Serializer):
glossary.save()
return instance
class AdminLiveSessionUserSerializer(serializers.ModelSerializer):
user_name = serializers.CharField(source='user.fullname', read_only=True)
user_email = serializers.CharField(source='user.email', read_only=True)
class Meta:
model = LiveSessionUser
fields = ['id', 'session', 'user', 'user_name', 'user_email', 'role', 'entered_at', 'exited_at', 'is_online']
class AdminLiveSessionRecordingSerializer(serializers.ModelSerializer):
file = FileFieldSerializer(required=False, allow_null=True)
thumbnail = FileFieldSerializer(required=False, allow_null=True)
class Meta:
model = LiveSessionRecording
fields = ['id', 'session', 'title', 'file', 'file_time', 'recording_type', 'thumbnail', 'is_active', 'created_at']
class AdminLiveSessionListSerializer(serializers.ModelSerializer):
course_title = serializers.CharField(source='course.title', read_only=True)
participant_count = serializers.SerializerMethodField()
class Meta:
model = CourseLiveSession
fields = ['id', 'course', 'course_title', 'room_id', 'subject', 'started_at', 'ended_at', 'participant_count', 'created_at']
def get_participant_count(self, obj):
return obj.user_sessions.count()
class AdminLiveSessionDetailSerializer(serializers.ModelSerializer):
course_title = serializers.CharField(source='course.title', read_only=True)
user_sessions = AdminLiveSessionUserSerializer(many=True, read_only=True)
recordings = AdminLiveSessionRecordingSerializer(many=True, read_only=True)
recorded_file = FileFieldSerializer(required=False, allow_null=True)
class Meta:
model = CourseLiveSession
fields = ['id', 'course', 'course_title', 'room_id', 'subject', 'started_at', 'ended_at', 'recorded_file', 'user_sessions', 'recordings', 'created_at', 'updated_at']

1
apps/course/urls.py

@ -9,6 +9,7 @@ router.register(r'admin/chapters', views.AdminChapterViewSet, basename='admin-ch
router.register(r'admin/course-lessons', views.AdminCourseLessonViewSet, basename='admin-course-lessons')
router.register(r'admin/course-attachments', views.AdminCourseAttachmentViewSet, basename='admin-course-attachments')
router.register(r'admin/course-glossaries', views.AdminCourseGlossaryViewSet, basename='admin-course-glossaries')
router.register(r'admin/live-sessions', views.AdminLiveSessionViewSet, basename='admin-live-sessions')
# Base model admin routes for the Repository Page
router.register(r'admin/categories', views.AdminCourseCategoryViewSet, basename='admin-categories')

39
apps/course/views/admin.py

@ -13,7 +13,10 @@ from apps.course.models import (
CourseAttachment,
Attachment,
CourseGlossary,
Glossary
Glossary,
CourseLiveSession,
LiveSessionUser,
LiveSessionRecording
)
from apps.course.serializers.admin import (
AdminCourseCategorySerializer,
@ -25,7 +28,9 @@ from apps.course.serializers.admin import (
AdminCourseGlossarySerializer,
AdminLessonSerializer,
AdminGlossarySerializer,
AdminAttachmentSerializer
AdminAttachmentSerializer,
AdminLiveSessionListSerializer,
AdminLiveSessionDetailSerializer
)
class AdminCourseViewSet(viewsets.ModelViewSet):
@ -272,3 +277,33 @@ class AdminAttachmentViewSet(viewsets.ModelViewSet):
queryset = queryset.filter(title__icontains=search)
return queryset
class AdminLiveSessionViewSet(viewsets.ModelViewSet):
"""
Admin CRUD ViewSet for Course Live Sessions.
"""
permission_classes = [IsAuthenticated, IsAdminUser]
authentication_classes = [TokenAuthentication]
def get_serializer_class(self):
if self.action == 'list':
return AdminLiveSessionListSerializer
return AdminLiveSessionDetailSerializer
def get_queryset(self):
queryset = CourseLiveSession.objects.all().select_related('course')
search = self.request.query_params.get('search', None)
if search:
queryset = queryset.filter(
Q(subject__icontains=search) |
Q(room_id__icontains=search) |
Q(course__title__icontains=search)
)
course_id = self.request.query_params.get('course', None)
if course_id:
queryset = queryset.filter(course_id=course_id)
return queryset.order_by('-started_at')
Loading…
Cancel
Save