for both template message and email senders, their workflow will follow: api->application->business->service->infra
127 lines
4.2 KiB
Python
127 lines
4.2 KiB
Python
from typing import List
|
|
from backend.services.email_sender_service import EmailSenderService
|
|
from backend.models.models import EmailSenderDoc
|
|
from common.log.module_logger import ModuleLogger
|
|
from datetime import datetime, timezone
|
|
|
|
|
|
class EmailSenderManager:
|
|
def __init__(self):
|
|
self.email_sender_service = EmailSenderService()
|
|
self.module_logger = ModuleLogger(sender_id="EmailSenderManager")
|
|
|
|
async def get_email_senders(self, tenant_id: str):
|
|
"""get email senders for tenant"""
|
|
email_senders = await self.email_sender_service.get_email_senders(tenant_id)
|
|
|
|
await self.module_logger.log_info(
|
|
info="Email senders retrieved",
|
|
properties={
|
|
"tenant_id": tenant_id,
|
|
"sender_count": len(email_senders)
|
|
}
|
|
)
|
|
|
|
return email_senders
|
|
|
|
async def set_email_senders(self, tenant_id: str, email_senders: List[str]):
|
|
"""set email senders for tenant"""
|
|
if not email_senders:
|
|
raise ValueError("Email senders list cannot be empty")
|
|
|
|
for email in email_senders:
|
|
if not self._is_valid_email(email):
|
|
raise ValueError(f"Invalid email format: {email}")
|
|
|
|
result = await self.email_sender_service.set_email_senders(tenant_id, email_senders)
|
|
|
|
await self.module_logger.log_info(
|
|
info="Email senders set",
|
|
properties={
|
|
"tenant_id": tenant_id,
|
|
"sender_count": len(email_senders)
|
|
}
|
|
)
|
|
|
|
return result
|
|
|
|
async def add_email_senders(self, tenant_id: str, new_senders: List[str]):
|
|
"""add email senders to tenant"""
|
|
if not new_senders:
|
|
raise ValueError("New senders list cannot be empty")
|
|
|
|
for email in new_senders:
|
|
if not self._is_valid_email(email):
|
|
raise ValueError(f"Invalid email format: {email}")
|
|
|
|
result = await self.email_sender_service.add_email_senders(tenant_id, new_senders)
|
|
|
|
await self.module_logger.log_info(
|
|
info="Email senders added",
|
|
properties={
|
|
"tenant_id": tenant_id,
|
|
"new_sender_count": len(new_senders),
|
|
"success": result.get("success", False)
|
|
}
|
|
)
|
|
|
|
return result
|
|
|
|
async def remove_email_senders(self, tenant_id: str, emails_to_remove: List[str]):
|
|
"""remove email senders from tenant"""
|
|
if not emails_to_remove:
|
|
raise ValueError("Emails to remove list cannot be empty")
|
|
|
|
result = await self.email_sender_service.remove_email_senders(tenant_id, emails_to_remove)
|
|
|
|
await self.module_logger.log_info(
|
|
info="Email senders removed",
|
|
properties={
|
|
"tenant_id": tenant_id,
|
|
"removed_count": len(emails_to_remove),
|
|
"success": result.get("success", False)
|
|
}
|
|
)
|
|
|
|
return result
|
|
|
|
async def clear_email_senders(self, tenant_id: str):
|
|
"""clear email senders for tenant"""
|
|
result = await self.email_sender_service.clear_email_senders(tenant_id)
|
|
|
|
await self.module_logger.log_info(
|
|
info="Email senders cleared",
|
|
properties={
|
|
"tenant_id": tenant_id,
|
|
"success": result.get("success", False)
|
|
}
|
|
)
|
|
|
|
return result
|
|
|
|
async def delete_email_sender(self, tenant_id: str):
|
|
"""delete email sender for tenant"""
|
|
result = await self.email_sender_service.delete_email_sender(tenant_id)
|
|
|
|
await self.module_logger.log_info(
|
|
info="Email sender configuration deleted",
|
|
properties={
|
|
"tenant_id": tenant_id,
|
|
"success": result.get("success", False)
|
|
}
|
|
)
|
|
|
|
return result
|
|
|
|
def _is_valid_email(self, email: str) -> bool:
|
|
"""validate email format"""
|
|
# TODO: add more complex email format validation if needed
|
|
import re
|
|
pattern = r'^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$'
|
|
return re.match(pattern, email) is not None
|
|
|
|
|
|
|
|
|
|
|
|
|