import asyncio from motor.motor_asyncio import AsyncIOMotorClient import os from app.core.config import Config MONGODB_URI = Config.MONGODB_URI DB_NAME = Config.MONGODB_DATABASE async def main(): client = AsyncIOMotorClient(MONGODB_URI, tz_aware=True) database = client[DB_NAME] print("[ASYNC_DATABASE] Starting collection and index creation...") # List existing collections before creation existing_collections = await database.list_collection_names() print(f"[ASYNC_DATABASE] Existing collections before creation: {existing_collections}") # Models collection print("[ASYNC_DATABASE] Creating models collection...") models_collection = database["models"] await models_collection.create_index([("model_id", 1)], unique=True) await models_collection.create_index([("user_id", 1), ("model_name", 1)]) await models_collection.create_index([("user_id", 1), ("tag", 1)]) await models_collection.create_index([("status", 1)]) await models_collection.create_index([("organization_id", 1)]) await models_collection.create_index([("department_id", 1)]) await models_collection.create_index([("created_at", -1)]) print("[ASYNC_DATABASE] Models collection and indexes created") # Training runs collection print("[ASYNC_DATABASE] Creating training_runs collection...") training_runs_collection = database["training_runs"] await training_runs_collection.create_index([("training_id", 1)], unique=True) await training_runs_collection.create_index([("model_id", 1)]) await training_runs_collection.create_index([("user_id", 1)]) await training_runs_collection.create_index([("status", 1)]) await training_runs_collection.create_index([("created_at", -1)]) await training_runs_collection.create_index([("compliance_type", 1)]) print("[ASYNC_DATABASE] Training runs collection and indexes created") # Validation runs collection print("[ASYNC_DATABASE] Creating validation_runs collection...") validation_runs_collection = database["validation_runs"] await validation_runs_collection.create_index([("validation_id", 1)], unique=True) await validation_runs_collection.create_index([("training_id", 1)]) await validation_runs_collection.create_index([("model_id", 1)]) await validation_runs_collection.create_index([("model_name", 1)]) await validation_runs_collection.create_index([("user_id", 1)]) await validation_runs_collection.create_index([("created_at", -1)]) await validation_runs_collection.create_index([("compliance_type", 1)]) print("[ASYNC_DATABASE] Validation runs collection and indexes created") # Prediction runs collection print("[ASYNC_DATABASE] Creating prediction_runs collection...") prediction_runs_collection = database["prediction_runs"] await prediction_runs_collection.create_index([("prediction_id", 1)], unique=True) await prediction_runs_collection.create_index([("training_id", 1)]) await prediction_runs_collection.create_index([("model_id", 1)]) await prediction_runs_collection.create_index([("model_name", 1)]) await prediction_runs_collection.create_index([("user_id", 1)]) await prediction_runs_collection.create_index([("created_at", -1)]) await prediction_runs_collection.create_index([("compliance_type", 1)]) print("[ASYNC_DATABASE] Prediction runs collection and indexes created") # System status collection print("[ASYNC_DATABASE] Creating system_status collection...") status_collection = database["system_status"] await status_collection.create_index([("training_id", 1)], unique=True) await status_collection.create_index([("user_id", 1)]) await status_collection.create_index([("status", 1)]) await status_collection.create_index([("created_at", -1)]) print("[ASYNC_DATABASE] System status collection and indexes created") # ----------------------------------------------------------------- # Organizations collection # ----------------------------------------------------------------- print("[ASYNC_DATABASE] Creating organizations collection...") organizations = database["organizations"] await organizations.create_index([("name", 1)]) print("[ASYNC_DATABASE] Organizations collection and indexes created") # ----------------------------------------------------------------- # Departments collection # ----------------------------------------------------------------- print("[ASYNC_DATABASE] Creating departments collection...") departments = database["departments"] await departments.create_index([("name", 1)]) # Foreign key style index to organization await departments.create_index([("organization_id", 1)]) print("[ASYNC_DATABASE] Departments collection and indexes created") # ----------------------------------------------------------------- # Users collection # ----------------------------------------------------------------- print("[ASYNC_DATABASE] Creating users collection...") users = database["users"] await users.create_index([("username", 1)]) # Foreign key style references await users.create_index([("organization_id", 1)]) await users.create_index([("department_id", 1)]) # Admin type filter await users.create_index([("admin_type", 1)]) print("[ASYNC_DATABASE] Users collection and indexes created") # ----------------------------------------------------------------- # Metadata collection # ----------------------------------------------------------------- print("[ASYNC_DATABASE] Creating Metadata collection...") meta_data = database["metadata"] # await meta_data.create_index([("metadata_id", 1)]) # await meta_data.create_index([("feature_data", 1)]) print("[ASYNC_DATABASE] Metadata collection and indexes created") # Verify collections were created final_collections = await database.list_collection_names() print(f"[ASYNC_DATABASE] Final collections after creation: {final_collections}") print("[ASYNC_DATABASE] All collections and indexes created successfully") print("[INDEX] All indexes created successfully.") client.close() if __name__ == "__main__": asyncio.run(main())