99 lines
2.4 KiB
Python
99 lines
2.4 KiB
Python
"""
|
||
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')
|
||
|