diff --git a/apps/notification/backend/business/notification_manager.py b/apps/notification/backend/business/notification_manager.py
index 786338f..eac6f63 100644
--- a/apps/notification/backend/business/notification_manager.py
+++ b/apps/notification/backend/business/notification_manager.py
@@ -86,26 +86,44 @@ class NotificationManager:
properties: dict,
region: Optional[UserRegion] = None,
) -> str:
- # leverage the information in properties to enrich the message.
- message_subject = None
- message = None
- if subject.lower() == "payment":
- pass
-
- # Default region to be international if not set
+ # Default region to international if not set
if region is None:
region = UserRegion.OTHER
- message_subject = SystemNotifications[region][subject.lower()][event.lower()][
- "message_subject"
- ]
- message = SystemNotifications[region][subject.lower()][event.lower()]["message"]
+ subject_lower = subject.lower()
+ event_lower = event.lower()
- if event.lower() == "authentication":
- message = message.format(properties["auth_code"])
- if not message:
- raise RuntimeError("unsupported event:{}".format(event))
- return message, message_subject
+ try:
+ # Get message template and subject from SystemNotifications
+ notification_config = SystemNotifications[region][subject_lower][event_lower]
+ message = notification_config["message"]
+ message_subject = notification_config["message_subject"]
+
+ # Handle authentication specific formatting
+ if event_lower == "authentication" and "auth_code" in properties:
+ message = message.format(properties["auth_code"])
+
+ # Append content_text if it exists in properties
+ if properties.get("content_text"):
+ if isinstance(properties["content_text"], dict):
+ # If content_text is a dictionary, use format with kwargs
+ message = message.format(**properties["content_text"])
+ elif isinstance(properties["content_text"], str):
+ # If content_text is a string, append it with proper spacing
+ content = properties["content_text"].strip()
+ if message and content:
+ # Use HTML line breaks for email compatibility
+ message = f"{message.rstrip()}
{content}"
+ else:
+ # If either is empty, just use the non-empty one
+ message = message or content
+
+ return message, message_subject
+
+ except KeyError as e:
+ raise RuntimeError(f"Unsupported configuration - subject: {subject_lower}, event: {event_lower}, error: {str(e)}")
+ except ValueError as e:
+ raise RuntimeError(f"Invalid message format - error: {str(e)}")
async def send_in_app_notification(
self, receiver_id: str, subject: str, event: str, properties: dict = None