"""Module that provides all database collections""" from typing import Any, Mapping from libbot.utils import config_get from pymongo import AsyncMongoClient from pymongo.asynchronous.collection import AsyncCollection from pymongo.asynchronous.database import AsyncDatabase db_config: Mapping[str, Any] = config_get("database") if db_config["user"] is not None and db_config["password"] is not None: con_string = "mongodb://{0}:{1}@{2}:{3}/{4}".format( db_config["user"], db_config["password"], db_config["host"], db_config["port"], db_config["name"], ) else: con_string = "mongodb://{0}:{1}/{2}".format(db_config["host"], db_config["port"], db_config["name"]) # Async declarations db_client = AsyncMongoClient(con_string) db: AsyncDatabase = db_client.get_database(name=db_config["name"]) col_users: AsyncCollection = db.get_collection("users") col_guilds: AsyncCollection = db.get_collection("guilds") col_events: AsyncCollection = db.get_collection("events") col_stages: AsyncCollection = db.get_collection("stages") # Update indexes async def _update_database_indexes() -> None: await col_users.create_index("id", name="user_id", unique=True) await col_guilds.create_index("id", name="guild_id", unique=True) await col_events.create_index("guild_id", name="guild_id", unique=False) await col_stages.create_index(["event_id", "guild_id"], name="event_id-and-guild_id", unique=False)