Refactor: api file endpoint for auth

This commit is contained in:
Aroy-Art 2025-03-20 15:59:38 +01:00
parent bd2791c155
commit 91e7ea2e81
Signed by: Aroy
GPG key ID: 583642324A1D2070
5 changed files with 156 additions and 26 deletions

View file

@ -5,28 +5,51 @@ 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"]
# Add any other fields you need
fields = [
"hash_blake3",
"file_type",
"file",
"thumbnail",
"filename",
"thumbnails",
"download_url",
]
def to_representation(self, instance):
"""Customize the representation of the model."""
representation = super().to_representation(instance)
# Add file name from related model
def get_filename(self, obj):
try:
representation["filename"] = instance.name.first().filename
return obj.name.first().filename
except (AttributeError, IndexError):
representation["filename"] = "Unknown"
return "Unknown"
# Add URLs for different thumbnail sizes
base_url = f"/api/files/{instance.hash_blake3}/"
def get_thumbnails(self, obj):
base_url = f"/api/files/{obj.hash_blake3}/"
thumbnails = {}
for size_key in THUMBNAIL_SIZES:
for size_key in ["sx", "sm", "md", "lg", "xl"]:
thumbnails[size_key] = f"{base_url}?t={size_key}"
return thumbnails
representation["thumbnails"] = thumbnails
representation["download_url"] = f"{base_url}?d=0"
def get_download_url(self, obj):
return f"/api/files/{obj.hash_blake3}/?d=0"
return representation
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")