for both template message and email senders, their workflow will follow: api->application->business->service->infra
151 lines
5.7 KiB
Python
151 lines
5.7 KiB
Python
from typing import Dict, List, Optional
|
|
from backend.business.template_message_manager import TemplateMessageManager
|
|
from common.constants.region import UserRegion
|
|
|
|
|
|
class TemplateMessageHub:
|
|
def __init__(self):
|
|
pass
|
|
|
|
async def verify_tenant_access(self, template_id: str, tenant_id: str, region: int):
|
|
"""get template by tenant and template ids with region"""
|
|
if not template_id or not tenant_id:
|
|
raise ValueError("template_id and tenant_id are required")
|
|
|
|
template_message_manager = TemplateMessageManager()
|
|
return await template_message_manager.verify_tenant_access(template_id, tenant_id, region)
|
|
|
|
# ==================== global templates ====================
|
|
async def create_global_template(
|
|
self,
|
|
template_id: str,
|
|
region: int,
|
|
subject: str,
|
|
body: str,
|
|
is_active: bool = True
|
|
):
|
|
"""create global template"""
|
|
if not template_id or not subject or not body:
|
|
raise ValueError("template_id, subject, and body are required")
|
|
|
|
template_message_manager = TemplateMessageManager()
|
|
return await template_message_manager.create_global_template_from_data(
|
|
template_id=template_id,
|
|
region=region,
|
|
subject=subject,
|
|
body=body,
|
|
is_active=is_active
|
|
)
|
|
|
|
async def update_global_template(self, template_id: str, data: dict, region: int):
|
|
"""update global template"""
|
|
if not template_id:
|
|
raise ValueError("template_id is required")
|
|
|
|
if not data:
|
|
raise ValueError("Update data cannot be empty")
|
|
|
|
allowed_fields = {"subject", "body", "is_active"}
|
|
invalid_fields = set(data.keys()) - allowed_fields
|
|
if invalid_fields:
|
|
raise ValueError(f"Invalid update fields: {invalid_fields}")
|
|
|
|
template_message_manager = TemplateMessageManager()
|
|
return await template_message_manager.update_global_template(template_id, data, region)
|
|
|
|
async def delete_global_template(self, template_id: str):
|
|
"""delete global template"""
|
|
if not template_id:
|
|
raise ValueError("template_id is required")
|
|
|
|
template_message_manager = TemplateMessageManager()
|
|
return await template_message_manager.delete_global_template(template_id)
|
|
|
|
async def list_global_templates(self, region: int):
|
|
"""list global templates"""
|
|
template_message_manager = TemplateMessageManager()
|
|
return await template_message_manager.list_global_templates(region)
|
|
|
|
# ==================== TENANT templates ====================
|
|
|
|
async def list_tenant_templates(self, tenant_id: str, region: int):
|
|
"""list tenant templates"""
|
|
template_message_manager = TemplateMessageManager()
|
|
return await template_message_manager.list_tenant_templates(tenant_id, region)
|
|
|
|
async def assign_templates_to_tenant(self, tenant_id: str, template_ids: List[str], region: int):
|
|
"""assign templates to tenant"""
|
|
if not template_ids:
|
|
raise ValueError("template_ids cannot be empty")
|
|
|
|
if not tenant_id:
|
|
raise ValueError("tenant_id is required")
|
|
|
|
template_message_manager = TemplateMessageManager()
|
|
return await template_message_manager.assign_templates_to_tenant(tenant_id, template_ids, region)
|
|
|
|
async def create_tenant_template(
|
|
self,
|
|
template_id: str,
|
|
region: int,
|
|
subject: str,
|
|
body: str,
|
|
tenant_id: str,
|
|
is_active: bool = True
|
|
):
|
|
"""create tenant template"""
|
|
if not template_id or not subject or not body or not tenant_id:
|
|
raise ValueError("template_id, subject, body, and tenant_id are required")
|
|
|
|
template_message_manager = TemplateMessageManager()
|
|
return await template_message_manager.create_tenant_template_from_data(
|
|
template_id=template_id,
|
|
region=region,
|
|
subject=subject,
|
|
body=body,
|
|
tenant_id=tenant_id,
|
|
is_active=is_active
|
|
)
|
|
|
|
|
|
async def update_tenant_template(self, tenant_id: str, template_id: str, data: dict, region: int):
|
|
"""update tenant template"""
|
|
if not template_id or not tenant_id:
|
|
raise ValueError("template_id and tenant_id are required")
|
|
|
|
if not data:
|
|
raise ValueError("Update data cannot be empty")
|
|
|
|
allowed_fields = {"subject", "body", "is_active"}
|
|
invalid_fields = set(data.keys()) - allowed_fields
|
|
if invalid_fields:
|
|
raise ValueError(f"Invalid update fields: {invalid_fields}")
|
|
|
|
template_message_manager = TemplateMessageManager()
|
|
return await template_message_manager.update_tenant_template(tenant_id, template_id, data, region)
|
|
|
|
async def delete_tenant_template(self, tenant_id: str, template_id: str, region: int):
|
|
"""delete tenant template"""
|
|
if not template_id or not tenant_id:
|
|
raise ValueError("template_id and tenant_id are required")
|
|
|
|
template_message_manager = TemplateMessageManager()
|
|
return await template_message_manager.delete_tenant_template(tenant_id, template_id, region)
|
|
|
|
async def render_template(
|
|
self,
|
|
tenant_id: str,
|
|
template_id: str,
|
|
properties: dict,
|
|
region: int
|
|
):
|
|
"""render template"""
|
|
if not template_id or not tenant_id:
|
|
raise ValueError("template_id and tenant_id are required")
|
|
|
|
if not properties:
|
|
raise ValueError("properties cannot be empty")
|
|
|
|
template_message_manager = TemplateMessageManager()
|
|
return await template_message_manager.render_template(tenant_id, template_id, properties, region)
|