DROP TABLE IF EXISTS properties, films, languages, subtitle_lines, subtitles, user_config; /** Store some information on the application. */ CREATE TABLE IF NOT EXISTS properties ( id int GENERATED ALWAYS AS IDENTITY, app_key text NOT NULL, app_value text NOT NULL, PRIMARY KEY (id), UNIQUE (app_key) ); /** Film */ CREATE TABLE IF NOT EXISTS films ( id int GENERATED ALWAYS AS IDENTITY, imdb_id varchar(10) NOT NULL, title text NOT NULL, year int, film_type text NOT NULL, season int, episode int, poster_link text, PRIMARY KEY (id), UNIQUE (imdb_id) ); /** Available languages */ CREATE TABLE IF NOT EXISTS languages ( id int GENERATED ALWAYS AS IDENTITY, alpha3_b char(3) NOT NULL, alpha3_t char(3), alpha2 char(2), english text NOT NULL, french text NOT NULL, PRIMARY KEY (id), UNIQUE (alpha3_b) ); /** Subtitles */ CREATE TABLE IF NOT EXISTS subtitles ( id int GENERATED ALWAYS AS IDENTITY, film_id int NOT NULL, language_id int NOT NULL, importer_id bigint, importer_guild_id bigint, imported_date timestamptz NOT NULL DEFAULT now(), UNIQUE (film_id, language_id), PRIMARY KEY (id), FOREIGN KEY (film_id) REFERENCES films (id), FOREIGN KEY (language_id) REFERENCES languages (id) ); /** Subtitle lines */ CREATE TABLE IF NOT EXISTS subtitle_lines ( id int GENERATED ALWAYS AS IDENTITY, subtitle_id int NOT NULL, dialog_line text NOT NULL, time_code text NOT NULL, PRIMARY KEY (id), FOREIGN KEY (subtitle_id) REFERENCES subtitles (id) ); /** User configurations */ CREATE TABLE IF NOT EXISTS user_config ( id int GENERATED ALWAYS AS IDENTITY, user_id bigint NOT NULL, guild_id bigint DEFAULT NULL, default_language_id int DEFAULT NULL, PRIMARY KEY (id), UNIQUE (user_id, guild_id), FOREIGN KEY (default_language_id) REFERENCES languages (id) );