This commit is contained in:
2026-08-24 15:54:08 +03:30
commit 236002a87c
133 changed files with 5946 additions and 0 deletions
+47
View File
@@ -0,0 +1,47 @@
from rest_framework import serializers
from apps.messaging.models import BulkMessage, Channel, MessageRecipient
class SendBulkMessageSerializer(serializers.Serializer):
group_id = serializers.CharField(required=False, allow_null=True, default=None)
contact_ids = serializers.ListField(child=serializers.CharField(), required=False, default=list)
template_id = serializers.CharField(required=False, allow_null=True, default=None)
body_override = serializers.CharField(required=False, allow_blank=True, default="")
channels = serializers.ListField(child=serializers.ChoiceField(choices=Channel.choices), min_length=1)
def validate(self, attrs):
if not attrs.get("template_id") and not attrs.get("body_override"):
raise serializers.ValidationError("یا template_id بده یا body_override.")
return attrs
class MessageRecipientSerializer(serializers.ModelSerializer):
contact_name = serializers.CharField(source="contact.name", read_only=True)
contact_phone = serializers.CharField(source="contact.phone", read_only=True)
class Meta:
model = MessageRecipient
fields = [
"id",
"contact",
"contact_name",
"contact_phone",
"channel",
"status",
"rendered_body",
"error",
]
class BulkMessageSerializer(serializers.ModelSerializer):
recipients = MessageRecipientSerializer(many=True, read_only=True)
needs_manual = serializers.SerializerMethodField()
class Meta:
model = BulkMessage
fields = ["id", "group", "template", "channels", "status", "created_at", "recipients", "needs_manual"]
def get_needs_manual(self, obj: BulkMessage):
pending = obj.recipients.filter(status=MessageRecipient.Status.NEEDS_MANUAL)
return MessageRecipientSerializer(pending, many=True).data