2026-05-31 14:55:01 +08:00
|
|
|
from rest_framework import serializers
|
2026-05-31 15:33:50 +08:00
|
|
|
from django.conf import settings
|
2026-05-31 14:55:01 +08:00
|
|
|
from .models import Project, Asset, CardLayer
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class ProjectSerializer(serializers.ModelSerializer):
|
|
|
|
|
class Meta:
|
|
|
|
|
model = Project
|
2026-06-01 17:11:06 +08:00
|
|
|
fields = [
|
|
|
|
|
'id', 'name', 'template_id',
|
|
|
|
|
'card_width', 'card_height',
|
|
|
|
|
'design', 'card_overrides', 'number_layout', 'face_orientations',
|
|
|
|
|
'export_resolution', 'export_include_back',
|
|
|
|
|
'created_at', 'updated_at',
|
|
|
|
|
]
|
2026-05-31 14:55:01 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
class AssetSerializer(serializers.ModelSerializer):
|
2026-05-31 15:33:50 +08:00
|
|
|
file_url = serializers.SerializerMethodField()
|
|
|
|
|
|
2026-05-31 14:55:01 +08:00
|
|
|
class Meta:
|
|
|
|
|
model = Asset
|
2026-06-01 17:11:06 +08:00
|
|
|
fields = ['id', 'asset_type', 'asset_key', 'file_path', 'file_name',
|
|
|
|
|
'file_url', 'width', 'height', 'uploaded_at']
|
2026-05-31 14:55:01 +08:00
|
|
|
|
2026-05-31 15:33:50 +08:00
|
|
|
def get_file_url(self, obj):
|
|
|
|
|
if obj.file_path:
|
|
|
|
|
request = self.context.get('request')
|
|
|
|
|
if request:
|
|
|
|
|
return request.build_absolute_uri(f'{settings.MEDIA_URL}{obj.file_path}')
|
|
|
|
|
return f'{settings.MEDIA_URL}{obj.file_path}'
|
|
|
|
|
return None
|
|
|
|
|
|
2026-05-31 14:55:01 +08:00
|
|
|
|
|
|
|
|
class CardLayerSerializer(serializers.ModelSerializer):
|
|
|
|
|
class Meta:
|
|
|
|
|
model = CardLayer
|
|
|
|
|
fields = '__all__'
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class ProjectDetailSerializer(serializers.ModelSerializer):
|
|
|
|
|
assets = AssetSerializer(many=True, read_only=True)
|
|
|
|
|
layers = CardLayerSerializer(many=True, read_only=True)
|
|
|
|
|
|
|
|
|
|
class Meta:
|
|
|
|
|
model = Project
|
2026-06-01 17:11:06 +08:00
|
|
|
fields = [
|
|
|
|
|
'id', 'name', 'template_id',
|
|
|
|
|
'card_width', 'card_height',
|
|
|
|
|
'design', 'card_overrides', 'number_layout', 'face_orientations',
|
|
|
|
|
'export_resolution', 'export_include_back',
|
|
|
|
|
'assets', 'layers',
|
|
|
|
|
'created_at', 'updated_at',
|
|
|
|
|
]
|