Files
shopship/apps/banker/api/crud_serializers.py
T

80 lines
3.1 KiB
Python
Raw Normal View History

2026-08-24 15:54:08 +03:30
from rest_framework import serializers
from apps.banker.models import (
Contact,
ContactField,
ContactGroup,
MessageTemplate,
StructuredTemplate,
StructuredTemplateField,
)
# سریالایزرهای CRUD واقعی (create/update/delete تکی) — برخلاف سریالایزرهای
# backup در serializers.py، این‌ها اعتبارسنجی یکتابودن id فعال دارند چون هر
# رکورد فقط یک‌بار create می‌شود، نه هر بار جایگزین کامل.
class ContactGroupCrudSerializer(serializers.ModelSerializer):
is_general = serializers.BooleanField(read_only=True)
class Meta:
model = ContactGroup
fields = ["id", "name", "color", "is_general", "member_ids"]
class ContactFieldCrudSerializer(serializers.ModelSerializer):
class Meta:
model = ContactField
fields = ["id", "group", "label", "sort_order"]
def validate_group(self, group: ContactGroup) -> ContactGroup:
# قبلا گروه عمومی فیلد سفارشی نداشت (برای کاربرانی که نیاز به
# پیچیدگی نمی‌خواستند)؛ چون الان کل مفهوم «گروه» از UX برداشته شده
# و همه‌چیز روی همان یک گروه عمومی کار می‌کند، این محدودیت دیگر
# معنی ندارد و مانع تعریف هر فیلدی می‌شد.
request = self.context["request"]
if group.user_id != request.user.id:
raise serializers.ValidationError("این گروه متعلق به شما نیست.")
return group
class ContactCrudSerializer(serializers.ModelSerializer):
class Meta:
model = Contact
fields = ["id", "name", "phone", "device_contact_id", "field_values", "channel_ids"]
class MessageTemplateCrudSerializer(serializers.ModelSerializer):
class Meta:
model = MessageTemplate
fields = ["id", "group", "name", "body", "mode"]
def validate_group(self, group: ContactGroup | None) -> ContactGroup | None:
if group is None:
return group
request = self.context["request"]
if group.user_id != request.user.id:
raise serializers.ValidationError("این گروه متعلق به شما نیست.")
return group
class StructuredTemplateFieldCrudSerializer(serializers.ModelSerializer):
class Meta:
model = StructuredTemplateField
fields = ["id", "template", "label", "sort_order"]
def validate_template(self, template: StructuredTemplate) -> StructuredTemplate:
request = self.context["request"]
if template.user_id != request.user.id:
raise serializers.ValidationError("این قالب متعلق به شما نیست.")
return template
class StructuredTemplateCrudSerializer(serializers.ModelSerializer):
fields = StructuredTemplateFieldCrudSerializer(many=True, read_only=True)
class Meta:
model = StructuredTemplate
fields = ["id", "name", "fields", "updated_at"]
read_only_fields = ["updated_at"]