From 561b4858dc5499005a4832f4a148c6993e4a2f07 Mon Sep 17 00:00:00 2001 From: Raphael Date: Thu, 12 Feb 2026 22:33:18 +0100 Subject: [PATCH] feat(db/migrations): adding migrations to the database --- migrations/001_create_enums.sql | 2 + migrations/002_create_tables.sql | 79 +++++++++++++++++++++++++++++++ migrations/003_create_indexes.sql | 6 +++ 3 files changed, 87 insertions(+) create mode 100644 migrations/001_create_enums.sql create mode 100644 migrations/002_create_tables.sql create mode 100644 migrations/003_create_indexes.sql diff --git a/migrations/001_create_enums.sql b/migrations/001_create_enums.sql new file mode 100644 index 0000000..0aad2e7 --- /dev/null +++ b/migrations/001_create_enums.sql @@ -0,0 +1,2 @@ +CREATE TYPE bot_presence AS ENUM ('online', 'idle', 'dnd', 'invisible'); +CREATE TYPE bot_activity AS ENUM ('Playing', 'Streaming', 'Listening', 'Watching', 'Competing'); diff --git a/migrations/002_create_tables.sql b/migrations/002_create_tables.sql new file mode 100644 index 0000000..d213b2d --- /dev/null +++ b/migrations/002_create_tables.sql @@ -0,0 +1,79 @@ +CREATE TABLE bots ( + id SERIAL PRIMARY KEY, + status TEXT NOT NULL DEFAULT 'TTY by EniumTeam', + type bot_activity NOT NULL DEFAULT 'Watching', + presence bot_presence NOT NULL DEFAULT 'dnd' +); + +CREATE TABLE users ( + user_id TEXT PRIMARY KEY, + is_owner BOOLEAN NOT NULL DEFAULT FALSE, + is_buyer BOOLEAN NOT NULL DEFAULT FALSE, + is_dev BOOLEAN NOT NULL DEFAULT FALSE, + is_enium BOOLEAN NOT NULL DEFAULT FALSE, + is_pwn BOOLEAN NOT NULL DEFAULT FALSE +); + +CREATE TABLE guilds ( + guild_id TEXT PRIMARY KEY, + + log_enable BOOLEAN NOT NULL DEFAULT FALSE, + log_category TEXT, + log_bot TEXT, + log_channels TEXT, + log_member TEXT, + log_mod TEXT, + log_msg TEXT, + log_server TEXT, + + join_enabled BOOLEAN NOT NULL DEFAULT FALSE, + join_message TEXT NOT NULL DEFAULT 'Bienvenue {user.mention} sur le serveur {guild.name}, tu es le {guild.count}e membre du serveur 👋', + join_channel TEXT, + leave_enabled BOOLEAN NOT NULL DEFAULT FALSE, + leave_message TEXT NOT NULL DEFAULT 'Au revoir {user.name} 👋', + leave_channel TEXT, + + protect_enabled BOOLEAN NOT NULL DEFAULT FALSE, + protect_anti_channel BOOLEAN NOT NULL DEFAULT FALSE, + protect_anti_rank BOOLEAN NOT NULL DEFAULT FALSE, + protect_anti_perm BOOLEAN NOT NULL DEFAULT FALSE, + protect_anti_massban BOOLEAN NOT NULL DEFAULT FALSE, + protect_anti_mass_mention BOOLEAN NOT NULL DEFAULT FALSE, + protect_anti_bot BOOLEAN NOT NULL DEFAULT FALSE, + + footer TEXT NOT NULL DEFAULT '© EniumTeam ~ 2025', + color INTEGER NOT NULL DEFAULT 0 +); + +CREATE TABLE guild_users ( + id SERIAL PRIMARY KEY, + user_id TEXT NOT NULL REFERENCES users(user_id) ON DELETE CASCADE, + guild_id TEXT NOT NULL REFERENCES guilds(guild_id) ON DELETE CASCADE, + + xp INTEGER NOT NULL DEFAULT 0, + level INTEGER NOT NULL DEFAULT 0, + is_wl_user BOOLEAN NOT NULL DEFAULT FALSE, + + invitation_count INTEGER NOT NULL DEFAULT 0, + invited_by TEXT, + + UNIQUE(user_id, guild_id) +); + +CREATE TABLE bot_buyers ( + bot_id INTEGER NOT NULL REFERENCES bots(id) ON DELETE CASCADE, + user_id TEXT NOT NULL REFERENCES users(user_id) ON DELETE CASCADE, + PRIMARY KEY (bot_id, user_id) +); + +CREATE TABLE bot_owners ( + bot_id INTEGER NOT NULL REFERENCES bots(id) ON DELETE CASCADE, + user_id TEXT NOT NULL REFERENCES users(user_id) ON DELETE CASCADE, + PRIMARY KEY (bot_id, user_id) +); + +CREATE TABLE guild_whitelist ( + guild_id TEXT NOT NULL REFERENCES guilds(guild_id) ON DELETE CASCADE, + user_id TEXT NOT NULL REFERENCES users(user_id) ON DELETE CASCADE, + PRIMARY KEY (guild_id, user_id) +); diff --git a/migrations/003_create_indexes.sql b/migrations/003_create_indexes.sql new file mode 100644 index 0000000..3fdc3a3 --- /dev/null +++ b/migrations/003_create_indexes.sql @@ -0,0 +1,6 @@ +CREATE INDEX idx_guild_users_user_id ON guild_users(user_id); +CREATE INDEX idx_guild_users_guild_id ON guild_users(guild_id); + +CREATE INDEX idx_bot_buyers_user_id ON bot_buyers(user_id); +CREATE INDEX idx_bot_owners_user_id ON bot_owners(user_id); +CREATE INDEX idx_guild_wl_user_id ON guild_whitelist(user_id);