from rest_framework import serializers from .models import Document class DocumentListSerializer(serializers.ModelSerializer[Document]): cover_url = serializers.SerializerMethodField() class Meta: model = Document fields = [ "id", "title", "author", "cover_url", "description", "file_type", "file_size", "page_count", "tags", "is_public", "uploaded_at", "updated_at", ] read_only_fields = ["id", "uploaded_at", "updated_at"] def get_cover_url(self, obj: Document) -> str | None: return obj.cover_url class DocumentDetailSerializer(DocumentListSerializer): owner = serializers.PrimaryKeyRelatedField(read_only=True) class Meta(DocumentListSerializer.Meta): fields = DocumentListSerializer.Meta.fields + ["owner", "file"] class DocumentUploadSerializer(serializers.ModelSerializer[Document]): class Meta: model = Document fields = [ "title", "author", "description", "cover", "file", "file_type", "file_size", "page_count", "tags", "is_public", ] def validate_file_size(self, value: int) -> int: max_size = 100 * 1024 * 1024 # 100 MB if value > max_size: raise serializers.ValidationError("File size must not exceed 100 MB.") return value