80 lines
3.1 KiB
Python
80 lines
3.1 KiB
Python
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"]
|