103 lines
2.8 KiB
SQL
103 lines
2.8 KiB
SQL
CREATE TABLE users (
|
|
-- TODO
|
|
id bigint PRIMARY KEY
|
|
);
|
|
|
|
CREATE TABLE game_versions (
|
|
id serial PRIMARY KEY,
|
|
version varchar(255) NOT NULL
|
|
);
|
|
|
|
CREATE TABLE loaders (
|
|
id serial PRIMARY KEY,
|
|
loader varchar(255) NOT NULL
|
|
);
|
|
|
|
CREATE TABLE teams (
|
|
id bigint PRIMARY KEY
|
|
);
|
|
|
|
CREATE TABLE release_channel (
|
|
id serial PRIMARY KEY,
|
|
channel varchar(255)
|
|
);
|
|
|
|
CREATE TABLE mods (
|
|
id bigint PRIMARY KEY,
|
|
team_id bigint REFERENCES teams NOT NULL,
|
|
title varchar(255) NOT NULL,
|
|
description varchar(2048) NOT NULL,
|
|
body_url varchar(2048) NOT NULL,
|
|
published timestamptz DEFAULT CURRENT_TIMESTAMP NOT NULL,
|
|
downloads integer NOT NULL DEFAULT 0,
|
|
|
|
icon_url varchar(2048) NULL,
|
|
issues_url varchar(2048) NULL,
|
|
source_url varchar(2048) NULL,
|
|
wiki_url varchar(2048) NULL
|
|
);
|
|
|
|
|
|
CREATE TABLE versions (
|
|
id bigint PRIMARY KEY,
|
|
mod_id bigint REFERENCES mods,
|
|
name varchar(255) NOT NULL,
|
|
version_number varchar(255) NOT NULL,
|
|
changelog_url varchar(255) NULL,
|
|
date_published timestamptz DEFAULT CURRENT_TIMESTAMP NOT NULL,
|
|
downloads integer NOT NULL DEFAULT 0,
|
|
|
|
release_channel int REFERENCES release_channel ON UPDATE CASCADE NOT NULL
|
|
);
|
|
|
|
CREATE TABLE loaders_versions (
|
|
loader_id int REFERENCES loaders ON UPDATE CASCADE NOT NULL,
|
|
version_id bigint REFERENCES versions ON UPDATE CASCADE NOT NULL,
|
|
PRIMARY KEY (loader_id, version_id)
|
|
);
|
|
|
|
CREATE TABLE game_versions_versions (
|
|
game_version_id integer REFERENCES game_versions ON UPDATE CASCADE NOT NULL,
|
|
joining_version_id bigint REFERENCES versions ON UPDATE CASCADE NOT NULL,
|
|
PRIMARY KEY (game_version_id, joining_version_id)
|
|
);
|
|
|
|
CREATE TABLE files (
|
|
id bigint PRIMARY KEY,
|
|
version_id bigint REFERENCES versions NOT NULL,
|
|
url varchar(2048) NOT NULL
|
|
);
|
|
|
|
CREATE TABLE hashes (
|
|
file_id bigint REFERENCES files NOT NULL,
|
|
algorithm varchar(255) NOT NULL,
|
|
hash bytea NOT NULL,
|
|
PRIMARY KEY (file_id, algorithm)
|
|
);
|
|
|
|
CREATE TABLE dependencies (
|
|
id serial PRIMARY KEY,
|
|
dependent_id bigint REFERENCES versions ON UPDATE CASCADE NOT NULL,
|
|
dependency_id bigint REFERENCES versions ON UPDATE CASCADE NOT NULL,
|
|
CONSTRAINT valid_dependency CHECK (dependent_id <> dependency_id) -- No dependency on yourself
|
|
);
|
|
|
|
CREATE TABLE team_members (
|
|
id bigint PRIMARY KEY,
|
|
team_id bigint REFERENCES teams NOT NULL,
|
|
user_id bigint REFERENCES users NOT NULL,
|
|
member_name varchar(255) NOT NULL,
|
|
role varchar(255) NOT NULL
|
|
);
|
|
|
|
CREATE TABLE categories (
|
|
id serial PRIMARY KEY,
|
|
category varchar(255) UNIQUE
|
|
);
|
|
|
|
CREATE TABLE mods_categories (
|
|
joining_mod_id bigint REFERENCES mods ON UPDATE CASCADE NOT NULL,
|
|
joining_category_id int REFERENCES categories ON UPDATE CASCADE NOT NULL,
|
|
PRIMARY KEY (joining_mod_id, joining_category_id)
|
|
);
|