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"}