freeleaps-service-hub/apps/notification/webapi/bootstrap/freeleaps_app.py

41 lines
1.8 KiB
Python

from fastapi import FastAPI
from backend.infra.rabbitmq.async_subscriber import AsyncMQSubscriber
from backend.models.constants import NotificationChannel
from webapi.utils.email_consumer import EmailMQConsumer
from webapi.utils.sms_consumer import SmsMQConsumer
from common.log.module_logger import ModuleLogger
from common.config.app_settings import app_settings
class FreeleapsApp(FastAPI):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.email_mq_client = AsyncMQSubscriber(NotificationChannel.EMAIL.name)
self.sms_mq_client = AsyncMQSubscriber(NotificationChannel.SMS.name)
self.in_app_mq_client = AsyncMQSubscriber(NotificationChannel.IN_APP.name)
self.email_handler = EmailMQConsumer(self.email_mq_client)
self.sms_handler = SmsMQConsumer(self.sms_mq_client)
# Register the consumers on startup and shutdown
print("Registering startup/shutdown events") # Debugging line
self.register_startup_shutdown_events()
def register_startup_shutdown_events(self):
@self.on_event("startup")
async def start_consumers():
print("starting up!")
# Add startup logging
module_logger = ModuleLogger(sender_id="ApplicationBootstrap")
await module_logger.log_info(
text=f"Notification service started successfully in {app_settings.APP_ENV} environment",
data={"app_name": app_settings.APP_NAME, "environment": app_settings.APP_ENV}
)
await self.sms_handler.register_consumer()
await self.email_handler.register_consumer()
@self.on_event("shutdown")
async def stop_consumers():
await self.sms_handler.unregister_consumer()
await self.email_handler.unregister_consumer()