freeleaps-service-hub/apps/notification/backend/services/email_sender_service.py
2025-07-25 19:16:40 +08:00

68 lines
3.2 KiB
Python

from backend.models.models import EmailSenderDoc
class EmailSenderService:
# get the email sender list for the tenant
async def get_email_sender(self, tenant_id: str):
doc = await EmailSenderDoc.find_one({"tenant_id": tenant_id, "is_active": True})
return doc.email_senders if doc else []
# set the email sender list for the tenant
async def set_email_sender(self, tenant_id: str, email_senders: list):
doc = await EmailSenderDoc.find_one({"tenant_id": tenant_id})
if doc:
await doc.set({"email_senders": email_senders})
return {"success": True, "email_senders": doc.email_senders}
else:
doc = EmailSenderDoc(tenant_id=tenant_id, email_senders=email_senders)
await doc.create()
return {"success": True, "email_senders": doc.email_senders}
# add new email senders to the tenant
async def add_email_senders(self, tenant_id: str, new_senders: list):
if not new_senders or not isinstance(new_senders, list):
return {"success": False, "msg": "No sender provided"}
doc = await EmailSenderDoc.find_one({"tenant_id": tenant_id, "is_active": True})
if doc:
original_set = set(doc.email_senders)
new_set = set(new_senders)
to_add = new_set - original_set
if not to_add:
return {"success": False, "msg": "All senders already exist"}
updated_list = list(original_set | new_set)
await doc.set({"email_senders": updated_list})
return {"success": True, "email_senders": updated_list}
else:
if not new_senders:
return {"success": False, "msg": "No sender provided"}
doc = await self.set_email_sender(tenant_id, new_senders)
return {"success": True, "email_senders": doc.email_senders}
# remove the email sender from the list
async def remove_email_senders(self, tenant_id: str, emails_to_remove: list):
doc = await EmailSenderDoc.find_one({"tenant_id": tenant_id, "is_active": True})
if not doc or not doc.email_senders:
return {"success": False, "msg": "No sender found"}
original_count = len(doc.email_senders)
doc.email_senders = [s for s in doc.email_senders if s not in emails_to_remove]
if len(doc.email_senders) == original_count:
return {"success": False, "msg": "No sender matched for removal"}
await doc.set({"email_senders": doc.email_senders})
return {"success": True, "remaining": doc.email_senders}
# clear the email sender list for the tenant
async def clear_email_senders(self, tenant_id: str):
doc = await EmailSenderDoc.find_one({"tenant_id": tenant_id, "is_active": True})
if doc:
await doc.set({"email_senders": []})
return {"success": True}
return {"success": False, "msg": "No sender config found"}
# delete the email sender list for the tenant
async def delete_email_sender(self, tenant_id: str):
doc = await EmailSenderDoc.find_one({"tenant_id": tenant_id})
if doc:
await doc.delete()
return {"success": True}
return {"success": False, "msg": "No sender config found"}