from rest_framework import serializers from apps.files.models import PostFileModel class PostFileSerializer(serializers.ModelSerializer): """Serializer for PostFileModel.""" filename = serializers.SerializerMethodField() thumbnails = serializers.SerializerMethodField() download_url = serializers.SerializerMethodField() class Meta: model = PostFileModel fields = [ "hash_blake3", "file_type", "file", "thumbnail", "filename", "thumbnails", "download_url", ] def get_filename(self, obj): try: return obj.name.first().filename except (AttributeError, IndexError): return "Unknown" def get_thumbnails(self, obj): base_url = f"/api/files/{obj.hash_blake3}/" thumbnails = {} for size_key in ["sx", "sm", "md", "lg", "xl"]: thumbnails[size_key] = f"{base_url}?t={size_key}" return thumbnails def get_download_url(self, obj): return f"/api/files/{obj.hash_blake3}/?d=0" class FileResponseSerializer(serializers.Serializer): """ Dummy serializer for file response schema documentation. This is only used for OpenAPI schema generation and will never be used to serialize data. """ file = serializers.FileField(help_text="The file content") class ErrorResponseSerializer(serializers.Serializer): """ Serializer for error responses. """ error = serializers.CharField(help_text="Error message")