- Remove ModuleLogger dependencies from notification and payment services startup - Fix startup blocking issues caused by circular database dependencies - Simplify freeleaps_app.py startup flows for both services - Service startup now completes without database connection dependency
37 lines
1.6 KiB
Python
37 lines
1.6 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
|
|
|
|
|
|
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!")
|
|
|
|
# Consumer registration first
|
|
await self.sms_handler.register_consumer()
|
|
await self.email_handler.register_consumer()
|
|
|
|
# Note: If we want startup logging for audit purposes,
|
|
# it should be done AFTER all critical startup is complete
|
|
# and database is ready. Currently keeping minimal startup.
|
|
|
|
@self.on_event("shutdown")
|
|
async def stop_consumers():
|
|
await self.sms_handler.unregister_consumer()
|
|
await self.email_handler.unregister_consumer()
|