nakama/moderation/backend-py/database.py

95 lines
2.3 KiB
Python
Raw Normal View History

2025-12-14 23:45:41 +00:00
"""
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')