Files
stash-box/pkg/database/migrations/postgres/1_initial.up.sql
WithoutPants 09392a009e Add User management (#13)
* Add user
* Generate root user
* Add create/update validation
* Disallow removing root user
* Fix packr deprecation message
* Change authorisation to user apikey
* Return error message when apikey fails
* Add integration tests for unauthorised calls
* Ignore .vscode
* Add gitattributes to fix UI eol lint issue
* Misc changes
* Prevent caching of integration test results
* Disallow changing root name or roles
* Remove old api key config
* Ensure api key matches stored key
* Add session management
* Fix empty key detection code
* Allow users to query users, hiding some info
* Add regenerate api key and change password
2020-01-23 07:22:30 +11:00

168 lines
5.0 KiB
SQL

CREATE TABLE "performers" (
"id" uuid not null primary key,
"name" varchar(255) not null,
"disambiguation" varchar(255),
"gender" varchar(20),
"birthdate" date,
"birthdate_accuracy" varchar(10),
"ethnicity" varchar(20),
"country" varchar(255),
"eye_color" varchar(10),
"hair_color" varchar(10),
"height" integer,
"cup_size" varchar(5),
"band_size" integer,
"hip_size" integer,
"waist_size" integer,
"breast_type" varchar(10),
"career_start_year" integer,
"career_end_year" integer,
"created_at" timestamp not null,
"updated_at" timestamp not null
);
CREATE TABLE "performer_aliases" (
"performer_id" uuid not null,
"alias" varchar(255) not null,
foreign key("performer_id") references "performers"("id") ON DELETE CASCADE,
unique ("performer_id", "alias")
);
CREATE TABLE "performer_urls" (
"performer_id" uuid not null,
"url" varchar not null,
"type" varchar(255) not null,
foreign key("performer_id") references "performers"("id") ON DELETE CASCADE,
unique ("performer_id", "url"),
unique ("performer_id", "type")
);
CREATE TABLE "performer_piercings" (
"performer_id" uuid not null,
"location" varchar(255),
"description" varchar(255),
foreign key("performer_id") references "performers"("id") ON DELETE CASCADE,
unique ("performer_id", "location")
);
CREATE TABLE "performer_tattoos" (
"performer_id" uuid not null,
"location" varchar(255),
"description" varchar(255),
foreign key("performer_id") references "performers"("id") ON DELETE CASCADE,
unique ("performer_id", "location")
);
CREATE INDEX "index_performers_on_name" on "performers" ("name");
CREATE INDEX "index_performers_on_alias" on "performer_aliases" ("alias");
CREATE INDEX "index_performers_on_piercing_location" on "performer_piercings" ("location");
CREATE INDEX "index_performers_on_tattoo_location" on "performer_tattoos" ("location");
CREATE INDEX "index_performers_on_tattoo_description" on "performer_tattoos" ("description");
CREATE TABLE "tags" (
"id" uuid not null primary key,
"name" varchar(255) not null,
"description" varchar(255),
"created_at" timestamp not null,
"updated_at" timestamp not null,
unique ("name")
);
CREATE TABLE "tag_aliases" (
"tag_id" uuid not null,
"alias" varchar(255) not null,
foreign key("tag_id") references "tags"("id") ON DELETE CASCADE,
unique ("alias")
);
CREATE TABLE "studios" (
"id" uuid not null primary key,
"name" varchar(255) not null,
"parent_studio_id" uuid,
"created_at" timestamp not null,
"updated_at" timestamp not null,
foreign key("parent_studio_id") references "studios"("id") ON DELETE CASCADE
);
CREATE TABLE "studio_urls" (
"studio_id" uuid not null,
"url" varchar not null,
"type" varchar(255) not null,
foreign key("studio_id") references "studios"("id") ON DELETE CASCADE,
unique ("studio_id", "url"),
unique ("studio_id", "type")
);
CREATE TABLE "scenes" (
"id" uuid not null primary key,
"title" varchar(255),
"details" text,
"date" date,
"studio_id" uuid,
"created_at" timestamp not null,
"updated_at" timestamp not null,
foreign key("studio_id") references "studios"("id") ON DELETE SET NULL
);
CREATE TABLE "scene_urls" (
"scene_id" uuid not null,
"url" varchar not null,
"type" varchar(255) not null,
foreign key("scene_id") references "scenes"("id") ON DELETE CASCADE,
unique ("scene_id", "url"),
unique ("scene_id", "type")
);
CREATE TABLE "scene_fingerprints" (
"scene_id" uuid not null,
"hash" varchar(255) not null,
"algorithm" varchar(20) not null,
foreign key("scene_id") references "scenes"("id") ON DELETE CASCADE,
unique ("scene_id", "algorithm", "hash")
);
CREATE INDEX "index_scene_fingerprints_on_hash" on "scene_fingerprints" ("algorithm", "hash");
CREATE TABLE "scene_performers" (
"scene_id" uuid not null,
"as" varchar(255),
"performer_id" uuid not null,
foreign key("scene_id") references "scenes"("id") ON DELETE CASCADE,
foreign key("performer_id") references "performers"("id") ON DELETE CASCADE,
unique("scene_id", "performer_id")
);
CREATE TABLE "scene_tags" (
"scene_id" uuid not null,
"tag_id" uuid not null,
foreign key("scene_id") references "scenes"("id") ON DELETE CASCADE,
foreign key("tag_id") references "tags"("id") ON DELETE CASCADE,
unique("scene_id", "tag_id")
);
CREATE TABLE "users" (
"id" uuid not null primary key,
"name" varchar(255) not null,
"password_hash" varchar(60) not null,
"email" varchar(255) not null,
"api_key" varchar(255) not null,
"api_calls" integer default 0,
"last_api_call" timestamp not null,
"created_at" timestamp not null,
"updated_at" timestamp not null,
unique ("name"),
unique ("email")
);
CREATE TABLE "user_roles" (
"user_id" uuid not null,
"role" varchar(10) not null,
foreign key("user_id") references "users"("id") ON DELETE CASCADE,
unique ("user_id", "role")
);
CREATE INDEX "index_users_on_name" on "users" ("name");
CREATE INDEX "index_users_on_email" on "users" ("email");
CREATE INDEX "index_users_on_api_key" on "users" ("api_key");