60 lines
2.5 KiB
Python
60 lines
2.5 KiB
Python
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)
|