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