Refactor: api file endpoint for auth
This commit is contained in:
parent
bd2791c155
commit
91e7ea2e81
5 changed files with 156 additions and 26 deletions
|
@ -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")
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue