from motor.motor_asyncio import AsyncIOMotorClient, AsyncIOMotorDatabase from typing import Optional from ..core.config import settings class MongoDB: """MongoDB connection manager""" client: Optional[AsyncIOMotorClient] = None db: Optional[AsyncIOMotorDatabase] = None @classmethod async def connect(cls): """Connect to MongoDB""" cls.client = AsyncIOMotorClient(settings.MONGODB_URL) cls.db = cls.client[settings.DB_NAME] print(f"✅ Connected to MongoDB: {settings.DB_NAME}") @classmethod async def disconnect(cls): """Disconnect from MongoDB""" if cls.client: cls.client.close() print("❌ Disconnected from MongoDB") @classmethod def get_db(cls) -> AsyncIOMotorDatabase: """Get database instance""" if cls.db is None: raise Exception("Database not initialized. Call connect() first.") return cls.db # Convenience function async def get_database() -> AsyncIOMotorDatabase: """Dependency to get database""" return MongoDB.get_db()