Feat: [#64] code CRUD serializer 구현

This commit is contained in:
sm4640
2025-06-05 18:32:20 +09:00
parent d1911eb1b8
commit d164279ef0

View File

@@ -0,0 +1,67 @@
from rest_framework import serializers
from .models import Code, Page, Element
# from datetime import datetime, timezone
from django.utils import timezone
# from zoneinfo import ZoneInfo
# KST = ZoneInfo("Asia/Seoul")
class ElementSerializer(serializers.Serializer):
element_id = serializers.CharField(required=False)
element_type = serializers.CharField()
content = serializers.CharField(allow_blank=True)
css = serializers.DictField()
class PageSerializer(serializers.Serializer):
cut = serializers.IntegerField()
elements = ElementSerializer(many=True)
class CodeSerializer(serializers.Serializer):
id = serializers.SerializerMethodField()
pages = PageSerializer(many=True, required=False)
created_at = serializers.SerializerMethodField()
updated_at = serializers.SerializerMethodField()
def get_created_at(self, obj):
return timezone.localtime(obj.created_at).isoformat(timespec="seconds")
def get_updated_at(self, obj):
return timezone.localtime(obj.updated_at).isoformat(timespec="seconds")
def get_id(self, obj):
return str(obj.id)
def create(self, validated_data):
pages_data = validated_data.pop('pages')
pages = [
Page(
cut=page['cut'],
elements=[Element(**el) for el in page['elements']]
) for page in pages_data
]
code = Code(pages=pages, **validated_data)
code.save()
return code
def update(self, instance, validated_data):
update_pages_data = validated_data.get('pages', [])
existing = {p.cut: p for p in instance.pages}
for page in update_pages_data:
cut = page.get('cut')
if cut and cut in existing:
page_obj = existing[cut]
page_obj.elements = [Element(**el) for el in page["elements"]]
else:
instance.pages.append(
Page(
cut=cut,
elements=[Element(**el) for el in page["elements"]]
)
)
instance.save()
return instance