modmapper/migrations/20210530010850_initial.sql

78 lines
2.8 KiB
SQL

CREATE TABLE IF NOT EXISTS "games" (
"id" SERIAL PRIMARY KEY NOT NULL,
"name" VARCHAR(255) NOT NULL,
"nexus_game_id" INTEGER NOT NULL,
"created_at" timestamp(3) NOT NULL,
"updated_at" timestamp(3) NOT NULL
);
CREATE UNIQUE INDEX "games_unique_name_and_nexus_game_id" ON "games" ("nexus_game_id", "name");
CREATE TABLE IF NOT EXISTS "mods" (
"id" SERIAL PRIMARY KEY NOT NULL,
"name" VARCHAR(255) NOT NULL,
"author" VARCHAR(255) NOT NULL,
"category" VARCHAR(255) NOT NULL,
"description" TEXT,
"nexus_mod_id" INTEGER NOT NULL,
"game_id" INTEGER REFERENCES "games"(id) NOT NULL,
"created_at" timestamp(3) NOT NULL,
"updated_at" timestamp(3) NOT NULL
);
CREATE UNIQUE INDEX "mods_unique_game_id_and_nexus_mod_id" ON "mods" ("game_id", "nexus_mod_id");
CREATE INDEX "mods_nexus_mod_id" ON "mods" ("nexus_mod_id");
CREATE TABLE IF NOT EXISTS "files" (
"id" SERIAL PRIMARY KEY NOT NULL,
"name" VARCHAR(255) NOT NULL,
"file_name" VARCHAR(255) NOT NULL,
"nexus_file_id" INTEGER NOT NULL,
"mod_id" INTEGER REFERENCES "mods"(id) NOT NULL,
"category" VARCHAR(255),
"version" VARCHAR(255),
"mod_version" VARCHAR(255),
"size" BIGINT NOT NULL,
"uploaded_at" timestamp(3) NOT NULL,
"has_download_link" BOOLEAN NOT NULL DEFAULT true,
"created_at" timestamp(3) NOT NULL,
"updated_at" timestamp(3) NOT NULL
);
CREATE UNIQUE INDEX "files_unique_mod_id_and_nexus_file_id" ON "files" ("mod_id", "nexus_file_id");
CREATE INDEX "files_nexus_file_id" ON "files" ("nexus_file_id");
CREATE TABLE IF NOT EXISTS "plugins" (
"id" SERIAL PRIMARY KEY NOT NULL,
"name" VARCHAR(255) NOT NULL,
"hash" BIGINT NOT NULL,
"file_id" INTEGER REFERENCES "files"(id) NOT NULL,
"version" FLOAT,
"size" BIGINT NOT NULL,
"author" TEXT,
"description" TEXT,
"masters" VARCHAR(255)[],
"created_at" timestamp(3) NOT NULL,
"updated_at" timestamp(3) NOT NULL
);
CREATE UNIQUE INDEX "plugins_unique_name_and_file_id" ON "plugins" ("file_id", "name");
CREATE INDEX "plugins_name" ON "plugins" ("name");
CREATE TABLE IF NOT EXISTS "cells" (
"id" SERIAL PRIMARY KEY NOT NULL,
"form_id" INTEGER NOT NULL,
"x" INTEGER,
"y" INTEGER,
"is_persistent" BOOLEAN NOT NULL,
"created_at" timestamp(3) NOT NULL,
"updated_at" timestamp(3) NOT NULL
);
CREATE UNIQUE INDEX "cells_unique_form_id" ON "cells" ("form_id");
CREATE TABLE IF NOT EXISTS "plugin_cells" (
"id" SERIAL PRIMARY KEY NOT NULL,
"plugin_id" INTEGER REFERENCES "plugins"(id) NOT NULL,
"cell_id" INTEGER REFERENCES "cells"(id) NOT NULL,
"editor_id" VARCHAR(255),
"created_at" timestamp(3) NOT NULL,
"updated_at" timestamp(3) NOT NULL
);
CREATE UNIQUE INDEX "plugin_cells_unique_plugin_id_and_cell_id" ON "plugin_cells" ("plugin_id", "cell_id");
CREATE INDEX "plugin_cells_cell_id" ON "plugin_cells" ("cell_id");