diff --git a/apps/notification/backend/models/models.py b/apps/notification/backend/models/models.py index 5d55cba..ab9d258 100644 --- a/apps/notification/backend/models/models.py +++ b/apps/notification/backend/models/models.py @@ -1,8 +1,9 @@ from beanie import Document from datetime import datetime -from typing import Optional +from typing import Optional, List from common.constants.region import UserRegion +from common.constants.email import EmailSenderStatus, BounceType class MessageTemplateDoc(Document): template_id: str @@ -16,11 +17,91 @@ class MessageTemplateDoc(Document): class Settings: name = "message_templates_doc" + indexes = [ + "template_id", + "tenant_id", + "region" + ] class EmailSenderDoc(Document): tenant_id: str - email_senders: list[str] = [] + email_senders: List[str] = [] is_active: bool = True class Settings: - name = "email_sender_doc" \ No newline at end of file + name = "email_sender_doc" + indexes = ["tenant_id"] + +class EmailSenderStatusDoc(Document): + email_id: str + tenant_id: str + email_senders: List[str] + recipient_email: str + template_id: Optional[str] = None + subject: str + body: str + status: EmailSenderStatus = EmailSenderStatus.PENDING + sent_at: Optional[datetime] = None + failed_at: Optional[datetime] = None + error_message: Optional[str] = None + retry_count: int = 0 + max_retries: int = 3 + message_id: Optional[str] = None + created_at: datetime = datetime.utcnow() + updated_at: Optional[datetime] = None + + class Settings: + name = "email_sender_status_doc" + indexes = [ + "email_id", + "tenant_id" + ] + +class EmailTrackingDoc(Document): + email_id: str + tenant_id: str + recipient_email: str + template_id: Optional[str] = None + sent_at: datetime + message_id: Optional[str] = None + + opened_at: Optional[datetime] = None + opened_count: int = 0 + + clicked_at: Optional[datetime] = None + clicked_count: int = 0 + clicked_links: List[str] = [] + + user_agent: Optional[str] = None + ip_address: Optional[str] = None + tracking_enabled: bool = True + created_at: datetime = datetime.utcnow() + updated_at: Optional[datetime] = None + + class Settings: + name = "email_tracking_doc" + indexes = [ + "email_id", + "tenant_id" + ] + +class EmailBounceDoc(Document): + email: str + tenant_id: str + template_id: Optional[str] = None + bounce_type: BounceType + reason: str + bounced_at: datetime + original_email_id: Optional[str] = None + original_message_id: Optional[str] = None + processed: bool = False + processed_at: Optional[datetime] = None + created_at: datetime = datetime.utcnow() + + class Settings: + name = "email_bounce_doc" + indexes = [ + "email", + "tenant_id" + ] + \ No newline at end of file