kaauh_ats/recruitment/dto/email_dto.py
2025-12-14 12:47:27 +03:00

89 lines
2.7 KiB
Python

"""
Email configuration data transfer objects for type-safe email operations.
"""
from dataclasses import dataclass, field
from typing import Optional, Dict, Any, List
from enum import Enum
class EmailTemplate(Enum):
"""Email template constants."""
BRANDED_BASE = "emails/email_template.html"
INTERVIEW_INVITATION = "emails/interview_invitation.html"
INTERVIEW_INVITATION_ALT = "interviews/email/interview_invitation.html"
AGENCY_WELCOME = "recruitment/emails/agency_welcome.html"
ASSIGNMENT_NOTIFICATION = "recruitment/emails/assignment_notification.html"
JOB_REMINDER = "emails/job_reminder.html"
REJECTION_SCREENING = "emails/rejection_screening_draft.html"
class EmailPriority(Enum):
"""Email priority levels for queue management."""
LOW = "low"
NORMAL = "normal"
HIGH = "high"
URGENT = "urgent"
@dataclass
class EmailConfig:
"""Configuration for sending a single email."""
to_email: str
subject: str
template_name: Optional[str] = None
context: Dict[str, Any] = field(default_factory=dict)
html_content: Optional[str] = None
attachments: List = field(default_factory=list)
sender: Optional[Any] = None
job: Optional[Any] = None
priority: EmailPriority = EmailPriority.NORMAL
cc_emails: List[str] = field(default_factory=list)
bcc_emails: List[str] = field(default_factory=list)
reply_to: Optional[str] = None
def __post_init__(self):
"""Validate email configuration."""
if not self.to_email:
raise ValueError("to_email is required")
if not self.subject:
raise ValueError("subject is required")
if not self.template_name and not self.html_content:
raise ValueError("Either template_name or html_content must be provided")
@dataclass
class BulkEmailConfig:
"""Configuration for bulk email sending."""
subject: str
template_name: Optional[str] = None
recipients_data: List[Dict[str, Any]] = field(default_factory=list)
attachments: List = field(default_factory=list)
sender: Optional[Any] = None
job: Optional[Any] = None
priority: EmailPriority = EmailPriority.NORMAL
async_send: bool = True
def __post_init__(self):
"""Validate bulk email configuration."""
if not self.subject:
raise ValueError("subject is required")
if not self.recipients_data:
raise ValueError("recipients_data cannot be empty")
@dataclass
class EmailResult:
"""Result of email sending operation."""
success: bool
message: str
recipient_count: int = 0
error_details: Optional[str] = None
task_id: Optional[str] = None
async_operation: bool = False