45 lines
1.7 KiB
Python
45 lines
1.7 KiB
Python
from app.notification.common.config.app_settings import app_settings
|
|
from app.notification.backend.infra.rabbitmq.async_subscriber import AsyncMQSubscriber
|
|
from app.notification.backend.infra.sms_handler import SmsHandler
|
|
from infra.log.module_logger import ModuleLogger
|
|
|
|
|
|
class SmsMQConsumer:
|
|
@staticmethod
|
|
async def message_handler(register_key: str, message: dict, args: dict):
|
|
register_key
|
|
sender_id = message["sender_id"]
|
|
receiver_id = message["receiver_id"]
|
|
sender_mobile = message["properties"]["sender_mobile"]
|
|
content_text = message["properties"]["content_text"]
|
|
receiver_type = message["properties"]["receiver_type"]
|
|
sms_consumer: SmsMQConsumer = args["message_handler"]
|
|
module_logger = ModuleLogger(sender_id="SmsMQConsumer")
|
|
if receiver_type == "mobile":
|
|
receiver_mobile = receiver_id
|
|
else:
|
|
receiver_mobile = None
|
|
module_logger.warning(
|
|
"unsupported receiver_type: '{}'".format(receiver_type)
|
|
)
|
|
return
|
|
|
|
await sms_consumer.sms_handler.send_sms(
|
|
sender_mobile, receiver_mobile, content_text
|
|
)
|
|
|
|
def __init__(self, mq_client: AsyncMQSubscriber) -> None:
|
|
self.sender_id = app_settings.SMS_FROM
|
|
self.sms_handler = SmsHandler()
|
|
self.mq_client = mq_client
|
|
|
|
async def register_consumer(self):
|
|
await self.mq_client.register_consumer(
|
|
registry_key=self.sender_id,
|
|
callback_method=SmsMQConsumer.message_handler,
|
|
args={"message_handler": self},
|
|
)
|
|
|
|
async def unregister_consumer(self):
|
|
await self.mq_client.unregister_consumer(registry_key=self.sender_id)
|