132 lines
5.0 KiB
Python
132 lines
5.0 KiB
Python
from typing import List, Optional
|
|
from backend.models.models import EmailSenderDoc
|
|
from common.log.module_logger import ModuleLogger
|
|
|
|
|
|
class EmailSenderHandler:
|
|
def __init__(self):
|
|
self.module_logger = ModuleLogger(sender_id="EmailSenderHandler")
|
|
|
|
async def get_email_sender(self, tenant_id: str) -> str:
|
|
"""get email sender for tenant"""
|
|
try:
|
|
doc = await EmailSenderDoc.find_one({"tenant_id": tenant_id, "is_active": True})
|
|
return doc.email_sender if doc else None
|
|
except Exception as e:
|
|
await self.module_logger.log_error(
|
|
error="Failed to get email sender",
|
|
properties={"tenant_id": tenant_id, "error": str(e)}
|
|
)
|
|
return None
|
|
|
|
async def set_email_sender(self, tenant_id: str, email_sender: str):
|
|
"""set email sender for tenant"""
|
|
try:
|
|
doc = await EmailSenderDoc.find_one({"tenant_id": tenant_id})
|
|
if doc:
|
|
await doc.set({"email_sender": email_sender})
|
|
await self.module_logger.log_info(
|
|
info="Email senders set in database",
|
|
properties={
|
|
"tenant_id": tenant_id,
|
|
"email_sender": email_sender
|
|
}
|
|
)
|
|
return {"success": True, "email_sender": email_sender}
|
|
else:
|
|
doc = EmailSenderDoc(tenant_id=tenant_id, email_sender=email_sender)
|
|
await doc.create()
|
|
await self.module_logger.log_info(
|
|
info="Email sender doc created",
|
|
properties={
|
|
"tenant_id": tenant_id,
|
|
"email_sender": email_sender
|
|
}
|
|
)
|
|
return {"success": True, "email_sender": doc.email_sender}
|
|
except Exception as e:
|
|
await self.module_logger.log_error(
|
|
error="Failed to set email sender",
|
|
properties={
|
|
"tenant_id": tenant_id,
|
|
"error": str(e)
|
|
}
|
|
)
|
|
raise
|
|
|
|
async def update_email_sender(self, tenant_id: str, email_sender: str):
|
|
"""update email sender for tenant (only if exists)"""
|
|
try:
|
|
doc = await EmailSenderDoc.find_one({"tenant_id": tenant_id, "is_active": True})
|
|
if not doc:
|
|
raise ValueError("Email sender configuration not found")
|
|
|
|
await doc.set({"email_sender": email_sender})
|
|
await self.module_logger.log_info(
|
|
info="Email sender updated in database",
|
|
properties={
|
|
"tenant_id": tenant_id,
|
|
"email_sender": email_sender
|
|
}
|
|
)
|
|
return {"success": True, "email_sender": email_sender}
|
|
except Exception as e:
|
|
await self.module_logger.log_error(
|
|
error="Failed to update email sender",
|
|
properties={
|
|
"tenant_id": tenant_id,
|
|
"error": str(e)
|
|
}
|
|
)
|
|
raise
|
|
|
|
async def remove_email_sender(self, tenant_id: str):
|
|
"""remove email sender from tenant"""
|
|
try:
|
|
doc = await EmailSenderDoc.find_one({"tenant_id": tenant_id, "is_active": True})
|
|
if not doc or not doc.email_sender:
|
|
return {"success": False, "msg": "No sender found"}
|
|
|
|
original_email_sender = doc.email_sender
|
|
|
|
await doc.set({"email_sender": None})
|
|
await self.module_logger.log_info(
|
|
info="Email sender removed from database",
|
|
properties={
|
|
"tenant_id": tenant_id,
|
|
"removed_email_sender": original_email_sender
|
|
}
|
|
)
|
|
return {"success": True, "removed_email_sender": original_email_sender}
|
|
except Exception as e:
|
|
await self.module_logger.log_error(
|
|
error="Failed to remove email sender",
|
|
properties={
|
|
"tenant_id": tenant_id,
|
|
"error": str(e)
|
|
}
|
|
)
|
|
raise
|
|
|
|
async def delete_email_sender(self, tenant_id: str):
|
|
"""delete email sender for tenant"""
|
|
try:
|
|
doc = await EmailSenderDoc.find_one({"tenant_id": tenant_id})
|
|
if doc:
|
|
await doc.delete()
|
|
await self.module_logger.log_info(
|
|
info="Email sender configuration deleted from database",
|
|
properties={"tenant_id": tenant_id}
|
|
)
|
|
return {"success": True}
|
|
return {"success": False, "msg": "No sender config found"}
|
|
except Exception as e:
|
|
await self.module_logger.log_error(
|
|
error="Failed to delete email sender",
|
|
properties={
|
|
"tenant_id": tenant_id,
|
|
"error": str(e)
|
|
}
|
|
)
|
|
raise
|