from motor.motor_asyncio import AsyncIOMotorClient from app.core.config import settings class Database: client: AsyncIOMotorClient = None def connect_db(self): # Adding connection pooling for faster concurrent requests self.client = AsyncIOMotorClient( settings.MONGODB_URL, minPoolSize=5, maxPoolSize=50, serverSelectionTimeoutMS=5000 ) print("✅ Connected to MongoDB with PoolSize=5-50") # Ensure proper indexing for student lookups (In background) import asyncio asyncio.create_task(self.ensure_indexes()) async def ensure_indexes(self): try: collection = self.get_collection() await collection.create_index([("studentId", 1), ("ownerAdmin", 1)], unique=True) print("✅ MongoDB Indexes ensured for performance") except Exception as e: print(f"⚠️ Index creation warning: {e}") def close_db(self): if self.client: self.client.close() print("🔌 Disconnected from MongoDB") def get_collection(self): if self.client is None: self.connect_db() # Self-healing on access return self.client[settings.DB_NAME][settings.COLLECTION_NAME] db = Database()