This repository has been archived on 2025-04-29. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
mixer-discord-bot/schema.sql
2023-04-17 19:42:35 +03:00

91 lines
2.7 KiB
PL/PgSQL

-- DROP TABLE IF EXISTS players_test;
-- DROP FUNCTION IF EXISTS rating_not_null;
-- DROP TYPE rating;
-- DROP TYPE IF EXISTS role;
-- CREATE TYPE rating AS (
-- rating REAL,
-- rd REAL,
-- volatility REAL
-- );
-- CREATE OR REPLACE FUNCTION rating_not_null(r rating) RETURNS BOOLEAN AS $$
-- BEGIN
-- RETURN (r.rating IS NOT NULL) AND (r.rd IS NOT NULL) AND (r.volatility IS NOT NULL);
-- END;
-- $$ LANGUAGE plpgsql;
-- CREATE TABLE players_test (
-- id SERIAL PRIMARY KEY,
-- discord_id BIGINT NOT NULL,
-- bn_name TEXT DEFAULT '',
-- bn_tag TEXT DEFAULT '',
-- tank_rating rating NOT NULL DEFAULT (2500.0, 300.0, 0.06),
-- dps_rating rating NOT NULL DEFAULT (2500.0, 300.0, 0.06),
-- support_rating rating NOT NULL DEFAULT (2500.0, 300.0, 0.06),
-- flex BOOLEAN NOT NULL DEFAULT true,
-- primary_role role,
-- secondary_role role,
-- tertiary_role role,
-- UNIQUE (discord_id),
-- CHECK (
-- rating_not_null(tank_rating) AND
-- rating_not_null(dps_rating) AND
-- rating_not_null(support_rating)
-- )
-- );
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_type WHERE typname = 'role') THEN
CREATE TYPE role AS ENUM ('tank', 'dps', 'support');
END IF;
END$$;
CREATE TABLE IF NOT EXISTS players (
id SERIAL PRIMARY KEY,
discord_id BIGINT NOT NULL,
bn_name TEXT,
bn_tag TEXT,
last_played TIMESTAMP,
tank_rating REAL NOT NULL DEFAULT 2500.0,
tank_rd REAL NOT NULL DEFAULT 300,
tank_volatility REAL NOT NULL DEFAULT 0.06,
dps_rating REAL NOT NULL DEFAULT 2500.0,
dps_rd REAL NOT NULL DEFAULT 300,
dps_volatility REAL NOT NULL DEFAULT 0.06,
support_rating REAL NOT NULL DEFAULT 2500.0,
support_rd REAL NOT NULL DEFAULT 300,
support_volatility REAL NOT NULL DEFAULT 0.06,
flex BOOLEAN NOT NULL DEFAULT true,
primary_role role,
secondary_role role,
tertiary_role role,
UNIQUE (discord_id)
);
CREATE TABLE IF NOT EXISTS guilds (
id SERIAL PRIMARY KEY,
guild_id BIGINT NOT NULL,
verified BOOLEAN NOT NULL DEFAULT false,
UNIQUE (guild_id)
);
CREATE TABLE IF NOT EXISTS lobbies (
id SERIAL PRIMARY KEY,
guild_id BIGINT NOT NULL,
main_voice_id BIGINT NOT NULL,
red_team_voice_id BIGINT NOT NULL,
blue_team_voice_id BIGINT NOT NULL
);
CREATE INDEX IF NOT EXISTS players_discord_id_idx ON players (discord_id);
CREATE INDEX IF NOT EXISTS lobbies_guild_id_idx ON lobbies (guild_id);
CREATE INDEX IF NOT EXISTS lobbies_main_voice_id_idx ON lobbies (main_voice_id);
CREATE INDEX IF NOT EXISTS lobbies_red_team_voice_id_idx ON lobbies (red_team_voice_id);
CREATE INDEX IF NOT EXISTS lobbies_blue_team_voice_id_idx ON lobbies (blue_team_voice_id);
CREATE INDEX IF NOT EXISTS guilds_guild_id_idx ON guilds (guild_id);