""" MongoDB connection and database utilities """ from motor.motor_asyncio import AsyncIOMotorClient from pymongo.errors import ConnectionFailure from config import settings # Global MongoDB client mongodb_client: AsyncIOMotorClient = None db = None async def connect_db(): """Connect to MongoDB""" global mongodb_client, db try: print(f"🔌 Подключение к MongoDB: {settings.MONGODB_URI.split('@')[-1] if '@' in settings.MONGODB_URI else settings.MONGODB_URI}") mongodb_client = AsyncIOMotorClient( settings.MONGODB_URI, maxPoolSize=10, minPoolSize=1, serverSelectionTimeoutMS=5000 ) # Test connection await mongodb_client.admin.command('ping') # Get database name from URI or use default db_name = settings.MONGODB_URI.split('/')[-1].split('?')[0] or 'nakama' db = mongodb_client[db_name] print(f"✅ MongoDB подключена (база: {db_name})") # Print collections count collections = await db.list_collection_names() print(f" 📚 Коллекций в базе: {len(collections)}") except ConnectionFailure as e: print(f"❌ Не удалось подключиться к MongoDB: {e}") raise except Exception as e: print(f"❌ Ошибка подключения к MongoDB: {e}") raise async def close_db(): """Close MongoDB connection""" global mongodb_client if mongodb_client: mongodb_client.close() print("✅ MongoDB отключена") def get_db(): """Get database instance""" return db def get_collection(collection_name: str): """Get collection by name""" return db[collection_name] # Collection shortcuts def users_collection(): return get_collection('users') def posts_collection(): return get_collection('posts') def reports_collection(): return get_collection('reports') def moderation_admins_collection(): return get_collection('moderationadmins') def email_verification_codes_collection(): return get_collection('emailverificationcodes') def admin_confirmations_collection(): return get_collection('adminconfirmations') def notifications_collection(): return get_collection('notifications')