File size: 1,461 Bytes
b26b1fd 25e337e 8a81353 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
from __future__ import annotations
from typing import Optional
from motor.motor_asyncio import AsyncIOMotorClient, AsyncIOMotorCollection, AsyncIOMotorDatabase
from app.core.config import settings
_mongo_client: Optional[AsyncIOMotorClient] = None
async def connect_to_mongo() -> None:
"""Initialize the MongoDB client once during application startup."""
global _mongo_client
if _mongo_client is not None:
return
client = AsyncIOMotorClient(settings.mongo_uri, serverSelectionTimeoutMS=5000)
# Trigger a server selection to fail fast if the URI/config is invalid.
await client.server_info()
_mongo_client = client
async def close_mongo_connection() -> None:
global _mongo_client
if _mongo_client is None:
return
_mongo_client.close()
_mongo_client = None
def get_client() -> AsyncIOMotorClient:
if _mongo_client is None:
raise RuntimeError("MongoDB client is not initialized. Wait for startup to finish.")
return _mongo_client
def get_database() -> AsyncIOMotorDatabase:
return get_client()[settings.mongo_db]
def get_autocategory_collection() -> AsyncIOMotorCollection:
return get_database()[settings.mongo_collection]
def get_api_logs_collection() -> AsyncIOMotorCollection:
return get_database()[settings.api_logs_collection]
def get_subcategory_collection() -> AsyncIOMotorCollection:
return get_database()[settings.mongo_subcategory_collection]
|