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()