chat / app /db /database.py
ariansyahdedy's picture
Add Gemnini Flash
07fbc67
raw
history blame
1.62 kB
# app/core/database.py
from motor.motor_asyncio import AsyncIOMotorClient
from app.core.config import settings
from pymongo import IndexModel, ASCENDING
import os
from dotenv import load_dotenv
load_dotenv()
client = AsyncIOMotorClient(settings.MONGO_DETAILS)
db = client[settings.MongoDB_NAME]
def get_database(db_name:str):
return client[db_name]
async def create_collection(db_name:str, collection_name:str):
database = get_database(db_name)
existing_collections = await database.list_collection_names()
if collection_name not in existing_collections:
await database.create_collection(collection_name)
else:
print(f"Collection '{collection_name}' already exists in database '{db_name}'")
async def list_collection_names(db_name: str):
database = get_database(db_name)
collection_names = await database.list_collection_names()
return collection_names
async def init_db():
print(f"Initializing database '{settings.MongoDB_NAME}'")
for collection_name in settings.COLLECTION_NAMES:
await create_collection(settings.MongoDB_NAME, collection_name)
collections = await list_collection_names(settings.MongoDB_NAME)
await create_indexes()
print(f"Collections in '{settings.MongoDB_NAME}': {collections}")
# Indexes for users and transactions
async def create_indexes():
user_index = IndexModel([("email", ASCENDING)], unique=True)
transaction_index = IndexModel([("user_id", ASCENDING), ("timestamp", ASCENDING)])
await db.users.create_indexes([user_index])
await db.transactions.create_indexes([transaction_index])