from rest_framework import serializers from apps.banker.models import Contact, ContactField, ContactGroup, MessageTemplate # نکته: id هر رکورد را خودِ اپ (UUID) تولید می‌کند و روی سرور هم همان مقدار # استفاده می‌شود. چون هر بار /backup/ کل رکوردهای کاربر جایگزین می‌شوند (نه # create تکی)، اعتبارسنج یکتابودنِ خودکار DRF روی id باید خاموش شود؛ وگرنه # از دومین بکاپ به بعد چون همان idها از قبل در دیتابیس هست، validation رد # می‌شود. _ID_NO_UNIQUE_CHECK = {"id": {"validators": []}} class ContactGroupSerializer(serializers.ModelSerializer): class Meta: model = ContactGroup fields = ["id", "name", "color", "is_general", "member_ids"] extra_kwargs = _ID_NO_UNIQUE_CHECK class ContactFieldSerializer(serializers.ModelSerializer): class Meta: model = ContactField fields = ["id", "group_id", "label", "sort_order"] extra_kwargs = _ID_NO_UNIQUE_CHECK class ContactSerializer(serializers.ModelSerializer): class Meta: model = Contact fields = ["id", "name", "phone", "device_contact_id", "field_values", "channel_ids"] extra_kwargs = _ID_NO_UNIQUE_CHECK class MessageTemplateSerializer(serializers.ModelSerializer): class Meta: model = MessageTemplate fields = ["id", "group_id", "name", "body", "mode", "runtime_field_labels"] extra_kwargs = _ID_NO_UNIQUE_CHECK class BackupSerializer(serializers.Serializer): """عکس کامل وضعیت اپ روی یک کاربر — برای پشتیبان‌گیری/بازیابی""" contact_fields = ContactFieldSerializer(many=True, required=False, default=list) contacts = ContactSerializer(many=True, required=False, default=list) groups = ContactGroupSerializer(many=True, required=False, default=list) templates = MessageTemplateSerializer(many=True, required=False, default=list)