66 lines
3.1 KiB
Python
66 lines
3.1 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:
|
|
result = await self.set_email_sender(tenant_id, new_senders)
|
|
return result
|
|
|
|
# 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"} |