freeleaps-service-hub/apps/notification/backend/services/email_sender_service.py

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)