55 lines
1.5 KiB
Python
55 lines
1.5 KiB
Python
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")
|