nakama/moderation/backend-py/database.py

99 lines
2.4 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""
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')
def moderation_chat_messages_collection():
return get_collection('moderationchatmessages')