from rest_framework import generics, status from rest_framework.response import Response from .models import VideoCategory, Video from .serializers import VideoCategoryListSerializer, VideoListSerializer, VideoDetailSerializer class VideoCategoryListAPIView(generics.ListAPIView): """ API view to list all video categories with their video counts """ serializer_class = VideoCategoryListSerializer def get_queryset(self): return VideoCategory.objects.filter(status=True).order_by('order') class VideoListAPIView(generics.ListAPIView): """ API view to list all videos, with optional category filtering """ serializer_class = VideoListSerializer def get_queryset(self): queryset = Video.objects.filter(status=True).order_by('-created_at') # Filter by category if provided category_slug = self.request.query_params.get('category', None) if category_slug: queryset = queryset.filter(category__slug=category_slug) return queryset class VideoDetailAPIView(generics.RetrieveAPIView): """ API view to get video details, including related videos from the same collection """ serializer_class = VideoDetailSerializer lookup_field = 'slug' def get_queryset(self): return Video.objects.filter(status=True) def retrieve(self, request, *args, **kwargs): instance = self.get_object() # Increment view count instance.increment_view_count() serializer = self.get_serializer(instance) return Response(serializer.data)