from django.contrib.auth import get_user_model from rest_framework import viewsets from . import ExtendedModelViewSet from .serializers import ( CategorySerializer, CourseSerializer, MaterialSerializer, LikeSerializer, ImageSerializer, TextSerializer, ImageTextSerializer, VideoSerializer, GallerySerializer, GalleryImageSerializer, UserSerializer, ) from apps.course.models import Category, Course, Material, Like from apps.content.models import ( Image, Text, ImageText, Video, Gallery, GalleryImage, ) User = get_user_model() class MaterialViewSet(ExtendedModelViewSet): queryset = Material.objects.all() serializer_class = MaterialSerializer search_fields = ('title', 'short_description',) ordering_fields = ('title', 'created_at', 'update_at',) class LikeViewSet(ExtendedModelViewSet): queryset = Like.objects.select_related('user').all() serializer_class = LikeSerializer search_fields = ('user__email', 'user__firstname', 'user__lastname',) ordering_fields = ('created_at', 'update_at',) class CategoryViewSet(ExtendedModelViewSet): queryset = Category.objects.all() serializer_class = CategorySerializer search_fields = ('title',) ordering_fields = ('title',) class CourseViewSet(ExtendedModelViewSet): queryset = Course.objects.select_related( 'author', 'category' ).prefetch_related( 'likes', 'materials' ).all() serializer_class = CourseSerializer filter_fields = ('category', 'status', 'is_infinite', 'is_featured',) search_fields = ('author__email', 'title', 'category__title',) ordering_fields = ('title', 'created_at', 'update_at',) class ImageViewSet(ExtendedModelViewSet): queryset = Image.objects.select_related( 'course', 'lesson' ).all() serializer_class = ImageSerializer search_fields = ('title',) ordering_fields = ('title', 'created_at', 'update_at', 'position',) class TextViewSet(ExtendedModelViewSet): queryset = Text.objects.select_related( 'course', 'lesson' ).all() serializer_class = TextSerializer search_fields = ('title',) ordering_fields = ('title', 'created_at', 'update_at', 'position',) class ImageTextViewSet(ExtendedModelViewSet): queryset = ImageText.objects.select_related( 'course', 'lesson' ).all() serializer_class = ImageTextSerializer search_fields = ('title',) ordering_fields = ('title', 'created_at', 'update_at', 'position',) class VideoViewSet(ExtendedModelViewSet): queryset = Video.objects.select_related( 'course', 'lesson' ).all() serializer_class = VideoSerializer search_fields = ('title',) ordering_fields = ('title', 'created_at', 'update_at', 'position',) class GalleryViewSet(ExtendedModelViewSet): queryset = Gallery.objects.select_related('course').all() serializer_class = GallerySerializer search_fields = ('title',) ordering_fields = ('title', 'created_at', 'update_at',) class GalleryImageViewSet(ExtendedModelViewSet): queryset = GalleryImage.objects.select_related('gallery').all() serializer_class = GalleryImageSerializer search_fields = ('gallery__title',) class UserViewSet(ExtendedModelViewSet): queryset = User.objects.all() serializer_class = UserSerializer filter_fields = ('is_staff', 'is_active', 'role', 'gender', 'is_email_proved', 'fb_id',) search_fields = ('email', 'first_name', 'last_name', 'country', 'city', 'fb_id',) ordering_fields = ('email', 'first_name', 'last_name', 'country', 'city', 'date_joined',)