from typing import List from backend.infra.email_sender_handler import EmailSenderHandler from backend.infra.email.email_validation_handler import EmailValidationHandler from backend.models.models import EmailSenderDoc class EmailSenderService: def __init__(self): self.email_sender_handler = EmailSenderHandler() self.email_validation_handler = EmailValidationHandler() async def get_email_sender(self, tenant_id: str) -> str: """get email sender for tenant""" if not tenant_id: raise ValueError("tenant_id is required") return await self.email_sender_handler.get_email_sender(tenant_id) async def set_email_sender(self, tenant_id: str, email_sender: str): """set email sender for tenant""" if not tenant_id: raise ValueError("tenant_id is required") if not email_sender: raise ValueError("email_sender must be provided") if not await self.email_validation_handler.is_valid_email(email_sender): raise ValueError("Invalid email format") # TODO: check if the email is already registered in SendGrid or other email service provider return await self.email_sender_handler.set_email_sender(tenant_id, email_sender) async def update_email_sender(self, tenant_id: str, email_sender: str): """update email sender for tenant (only if exists)""" if not tenant_id: raise ValueError("tenant_id is required") if not email_sender: raise ValueError("email_sender must be provided") if not await self.email_validation_handler.is_valid_email(email_sender): raise ValueError("Invalid email format") # Check if email sender exists first existing_sender = await self.email_sender_handler.get_email_sender(tenant_id) if not existing_sender: raise ValueError("Email sender configuration not found for this tenant") # TODO: check if the email is already registered in SendGrid or other email service provider # Only update if exists return await self.email_sender_handler.update_email_sender(tenant_id, email_sender) async def delete_email_sender(self, tenant_id: str): """delete email sender for tenant""" if not tenant_id: raise ValueError("tenant_id is required") return await self.email_sender_handler.delete_email_sender(tenant_id)