from django.contrib.auth import get_user_model from rest_framework import serializers from . import Base64ImageField from apps.course.models import Category, Course, Material, Lesson, Like from apps.content.models import ( Image, Text, ImageText, Video, Gallery, GalleryImage, ImageObject, ) User = get_user_model() class ImageObjectSerializer(serializers.ModelSerializer): image = Base64ImageField( required=True, allow_empty_file=False, allow_null=False, read_only=False, ) class Meta: model = ImageObject fields = ( 'id', 'image', 'created_at', 'update_at', ) read_only_fields = ( 'id', 'created_at', 'update_at', ) class GallerySerializer(serializers.ModelSerializer): class Meta: model = Gallery fields = ( 'id', 'title', 'created_at', 'update_at', ) read_only_fields = ( 'id', 'created_at', 'update_at', ) class GalleryImageCreateSerializer(serializers.ModelSerializer): class Meta: model = GalleryImage fields = ( 'id', 'gallery', 'img', 'created_at', 'update_at', ) read_only_fields = ( 'id', 'created_at', 'update_at', ) class GalleryImageSerializer(GalleryImageCreateSerializer): img = ImageObjectSerializer() class MaterialSerializer(serializers.ModelSerializer): class Meta: model = Material fields = ( 'id', 'title', 'cover', 'short_description', 'created_at', 'update_at', ) read_only_fields = ( 'id', 'cover', 'created_at', 'update_at', ) class LikeSerializer(serializers.ModelSerializer): class Meta: model = Like fields = ( 'id', 'user', 'created_at', 'update_at', ) read_only_fields = ( 'id', 'created_at', 'update_at', ) class CategorySerializer(serializers.ModelSerializer): class Meta: model = Category fields = ( 'id', 'title', ) read_only_fields = ( 'id', ) class CourseCreateSerializer(serializers.ModelSerializer): class Meta: model = Course fields = ( 'id', 'author', 'title', 'short_description', 'from_author', 'cover', 'price', 'is_infinite', 'deferred_start_at', 'category', 'duration', 'is_featured', 'url', 'status', 'likes', 'materials', 'created_at', 'update_at', 'content', 'gallery', ) read_only_fields = ( 'id', 'content', 'created_at', 'update_at', ) class CourseSerializer(CourseCreateSerializer): category = CategorySerializer() materials = MaterialSerializer(many=True) cover = ImageObjectSerializer() gallery = GallerySerializer() class LessonCreateSerializer(serializers.ModelSerializer): class Meta: model = Lesson fields = ( 'id', 'title', 'short_description', 'course', 'cover', 'content', 'created_at', 'update_at', ) read_only_fields = ( 'id', 'content', 'created_at', 'update_at', ) class LessonSerializer(LessonCreateSerializer): course = CourseSerializer() cover = ImageObjectSerializer() class ImageCreateSerializer(serializers.ModelSerializer): class Meta: model = Image fields = ( 'id', 'course', 'lesson', 'title', 'position', 'img', 'created_at', 'update_at', ) read_only_fields = ( 'id', 'created_at', 'update_at', ) class ImageSerializer(ImageCreateSerializer): course = CourseSerializer() lesson = LessonSerializer() img = ImageObjectSerializer() class TextCreateSerializer(serializers.ModelSerializer): class Meta: model = Text fields = ( 'id', 'course', 'lesson', 'title', 'position', 'created_at', 'update_at', ) + ('txt',) read_only_fields = ( 'id', 'created_at', 'update_at', ) class TextSerializer(TextCreateSerializer): course = CourseSerializer() lesson = LessonSerializer() class ImageTextCreateSerializer(serializers.ModelSerializer): class Meta: model = ImageText fields = ( 'id', 'course', 'lesson', 'title', 'position', 'img', 'txt', 'created_at', 'update_at', ) read_only_fields = ( 'id', 'created_at', 'update_at', ) class ImageTextSerializer(ImageTextCreateSerializer): course = CourseSerializer() lesson = LessonSerializer() img = ImageObjectSerializer() class VideoCreateSerializer(serializers.ModelSerializer): class Meta: model = Video fields = ( 'id', 'course', 'lesson', 'title', 'position', 'created_at', 'update_at', ) + ('url',) read_only_fields = ( 'id', 'created_at', 'update_at', ) class VideoSerializer(VideoCreateSerializer): course = CourseSerializer() lesson = LessonSerializer() class UserSerializer(serializers.ModelSerializer): class Meta: model = User fields = ( 'id', 'username', 'email', 'first_name', 'last_name', 'is_staff', 'is_active', 'date_joined', 'role', 'gender', 'country', 'city', 'about', 'instagram', 'facebook', 'twitter', 'pinterest', 'youtube', 'vkontakte', 'fb_id', 'fb_data', 'is_email_proved', 'photo', ) read_only_fields = ( 'id', 'photo', 'date_joined', 'is_staff', 'fb_id', 'fb_data', ) class UserPhotoSerializer(serializers.Serializer): photo = Base64ImageField( required=False, allow_empty_file=True, allow_null=True )