This commit is contained in:
Iliyan Angelov
2025-09-22 20:29:41 +03:00
parent c67067a2a4
commit 9454b6ae19
2724 changed files with 1615 additions and 5 deletions

View File

@@ -64,6 +64,23 @@ class EmailSerializer(serializers.ModelSerializer):
return obj.threads.count()
class JSONListField(serializers.Field):
"""Custom field to handle JSON strings for email lists."""
def to_internal_value(self, data):
import json
if isinstance(data, str):
try:
return json.loads(data)
except json.JSONDecodeError:
# If it's not valid JSON, treat as a single email
return [data] if data else []
return data or []
def to_representation(self, value):
return value
class EmailCreateSerializer(serializers.ModelSerializer):
"""Serializer for creating emails."""
@@ -73,11 +90,16 @@ class EmailCreateSerializer(serializers.ModelSerializer):
write_only=True
)
# Override email fields to use custom JSON field
to_emails = JSONListField()
cc_emails = JSONListField(required=False)
bcc_emails = JSONListField(required=False)
class Meta:
model = Email
fields = (
'subject', 'to_emails', 'cc_emails', 'bcc_emails', 'reply_to',
'body_text', 'body_html', 'priority', 'folder', 'attachments'
'body_text', 'body_html', 'priority', 'attachments'
)
def validate_to_emails(self, value):
@@ -85,6 +107,12 @@ class EmailCreateSerializer(serializers.ModelSerializer):
raise serializers.ValidationError("At least one recipient is required.")
return value
def validate_cc_emails(self, value):
return value or []
def validate_bcc_emails(self, value):
return value or []
def create(self, validated_data):
attachments_data = validated_data.pop('attachments', [])
user = self.context['request'].user
@@ -92,6 +120,17 @@ class EmailCreateSerializer(serializers.ModelSerializer):
# Set from_email to user's email
validated_data['from_email'] = user.email
# Set default folder to "Sent" if not specified
if 'folder' not in validated_data:
try:
sent_folder = EmailFolder.objects.get(user=user, folder_type='sent')
validated_data['folder'] = sent_folder
except EmailFolder.DoesNotExist:
# Fallback to first available folder
folder = EmailFolder.objects.filter(user=user).first()
if folder:
validated_data['folder'] = folder
# Create email
email = Email.objects.create(user=user, **validated_data)