| from backend.data.mongodb_client import connect_to_mongodb, get_database, check_mongodb_health |
| from backend.core.logging import logger |
|
|
|
|
| async def init_database() -> bool: |
| if not await connect_to_mongodb(): |
| logger.error("Failed to connect to MongoDB") |
| return False |
|
|
| database = get_database() |
| if database is None: |
| logger.error("Database instance not available") |
| return False |
|
|
| try: |
| |
| papers = database["research_papers"] |
|
|
| await papers.create_index("file_hash", unique=True) |
| await papers.create_index("source") |
| await papers.create_index("status") |
| await papers.create_index("arxiv_id", sparse=True) |
| await papers.create_index("doi", sparse=True) |
| await papers.create_index("publication_year") |
| await papers.create_index([("uploaded_at", -1)]) |
|
|
| logger.info("Created indexes for research_papers collection") |
|
|
| |
| request_logs = database["request_logs"] |
|
|
| await request_logs.create_index([("timestamp", -1)]) |
| await request_logs.create_index("response_time") |
| await request_logs.create_index("endpoint") |
|
|
| logger.info("Created indexes for request_logs collection") |
|
|
| |
| checkpoints = database["ingestion_checkpoints"] |
|
|
| await checkpoints.create_index([("upload_id", 1), ("step", 1)]) |
| await checkpoints.create_index("status") |
| await checkpoints.create_index([("metadata.started_at", -1)]) |
|
|
| logger.info("Created indexes for ingestion_checkpoints collection") |
|
|
| if await check_mongodb_health(): |
| logger.info("Database initialized successfully") |
| return True |
| else: |
| logger.error("Database health check failed after init") |
| return False |
|
|
| except Exception as e: |
| logger.error(f"Error initializing database indexes: {e}") |
| return False |
|
|