feat(models): add indexs and models
add high-frequent indexes for TemplateMessageDoc and EmailSenderDoc add some models that will be used in sending email
This commit is contained in:
parent
e46c81c993
commit
c1148a44d5
@ -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"
|
||||
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"
|
||||
]
|
||||
|
||||
Loading…
Reference in New Issue
Block a user