From 126dfa8b301f3b796b2dd453e53bb24aea99e06c Mon Sep 17 00:00:00 2001 From: profitroll Date: Mon, 19 May 2025 22:05:38 +0200 Subject: [PATCH] Closes #19 --- migrations/202505192040.py | 59 ++++++++++++++++++++++++++++++++++++++ modules/database.py | 6 ++-- 2 files changed, 62 insertions(+), 3 deletions(-) create mode 100644 migrations/202505192040.py diff --git a/migrations/202505192040.py b/migrations/202505192040.py new file mode 100644 index 0000000..109eab9 --- /dev/null +++ b/migrations/202505192040.py @@ -0,0 +1,59 @@ +from typing import Dict, Any + +from mongodb_migrations.base import BaseMigration + + +class Migration(BaseMigration): + def upgrade(self): + index_information_users: Dict[str, Any] = self.db.users.index_information() + index_information_events: Dict[str, Any] = self.db.events.index_information() + index_information_stages: Dict[str, Any] = self.db.stages.index_information() + + # Update users collection + if "user_id" in index_information_users: + self.db.users.drop_index("user_id") + + if "user_id-guild_id" not in index_information_users: + self.db.users.create_index(["id", "guild_id"], name="user_id-guild_id", unique=True) + + # Update events collection + if "guild_id" in index_information_events: + self.db.events.drop_index("guild_id") + + if "event_name-guild_id" not in index_information_events: + self.db.events.create_index(["name", "guild_id"], name="event_name-guild_id", unique=False) + + # Update stages collection + if "event_id-and-guild_id" in index_information_stages: + self.db.stages.drop_index("event_id-and-guild_id") + + if "event_id-guild_id" not in index_information_stages: + self.db.stages.create_index(["event_id", "guild_id"], name="event_id-guild_id", unique=False) + + def downgrade(self): + index_information_users: Dict[str, Any] = self.db.users.index_information() + index_information_events: Dict[str, Any] = self.db.events.index_information() + index_information_stages: Dict[str, Any] = self.db.stages.index_information() + + # Update users collection + if "user_id-guild_id" in index_information_users: + self.db.users.drop_index("user_id-guild_id") + + if "user_id" not in index_information_users: + self.db.users.create_index("id", name="user_id", unique=True) + + # Update events collection + if "event_name-guild_id" in index_information_events: + self.db.events.drop_index("event_name-guild_id") + + if "guild_id" not in index_information_events: + self.db.events.create_index("guild_id", name="guild_id", unique=False) + + # Update stages collection + if "event_id-guild_id" in index_information_stages: + self.db.stages.drop_index("event_id-guild_id") + + if "event_id-and-guild_id" not in index_information_stages: + self.db.stages.create_index( + ["event_id", "guild_id"], name="event_id-and-guild_id", unique=False + ) diff --git a/modules/database.py b/modules/database.py index cbcb38c..c03c4cc 100644 --- a/modules/database.py +++ b/modules/database.py @@ -32,7 +32,7 @@ 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_users.create_index(["id", "guild_id"], name="user_id-guild_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) + await col_events.create_index(["name", "guild_id"], name="event_name-guild_id", unique=False) + await col_stages.create_index(["event_id", "guild_id"], name="event_id-guild_id", unique=False)