117 lines
4.1 KiB
MySQL
117 lines
4.1 KiB
MySQL
|
-- TODO: Implement tagging/ratings/revisions
|
||
|
-- Goal for now is just to get Kemono working in SQL.
|
||
|
|
||
|
-- Posts
|
||
|
CREATE TABLE IF NOT EXISTS booru_posts (
|
||
|
"id" varchar(255) NOT NULL,
|
||
|
"user" varchar(255) NOT NULL,
|
||
|
"service" varchar(20) NOT NULL,
|
||
|
"title" text NOT NULL DEFAULT '',
|
||
|
"content" text NOT NULL DEFAULT '',
|
||
|
"embed" jsonb NOT NULL DEFAULT '{}',
|
||
|
"shared_file" boolean NOT NULL DEFAULT '0',
|
||
|
"added" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
|
"published" timestamp,
|
||
|
"edited" timestamp,
|
||
|
"file" jsonb NOT NULL,
|
||
|
"attachments" jsonb[] NOT NULL
|
||
|
);
|
||
|
CREATE INDEX IF NOT EXISTS id_idx ON booru_posts USING hash ("id");
|
||
|
CREATE INDEX IF NOT EXISTS user_idx ON booru_posts USING btree ("user");
|
||
|
CREATE INDEX IF NOT EXISTS service_idx ON booru_posts USING btree ("service");
|
||
|
CREATE INDEX IF NOT EXISTS added_idx ON booru_posts USING btree ("added");
|
||
|
CREATE INDEX IF NOT EXISTS published_idx ON booru_posts USING btree ("published");
|
||
|
CREATE INDEX IF NOT EXISTS updated_idx ON booru_posts USING btree ("user", "service", "added");
|
||
|
|
||
|
-- Booru bans
|
||
|
CREATE TABLE IF NOT EXISTS dnp (
|
||
|
"id" varchar(255) NOT NULL,
|
||
|
"service" varchar(20) NOT NULL
|
||
|
);
|
||
|
|
||
|
-- Posts (Discord)
|
||
|
CREATE TABLE IF NOT EXISTS discord_posts (
|
||
|
"id" varchar(255) NOT NULL,
|
||
|
"author" jsonb NOT NULL,
|
||
|
"server" varchar(255) NOT NULL,
|
||
|
"channel" varchar(255) NOT NULL,
|
||
|
"content" text NOT NULL DEFAULT '',
|
||
|
"added" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
|
"published" timestamp,
|
||
|
"edited" timestamp,
|
||
|
"embeds" jsonb[] NOT NULL,
|
||
|
"mentions" jsonb[] NOT NULL,
|
||
|
"attachments" jsonb[] NOT NULL
|
||
|
);
|
||
|
CREATE INDEX IF NOT EXISTS discord_id_idx ON discord_posts USING hash ("id");
|
||
|
CREATE INDEX IF NOT EXISTS server_idx ON discord_posts USING hash ("server");
|
||
|
CREATE INDEX IF NOT EXISTS channel_idx ON discord_posts USING hash ("channel");
|
||
|
|
||
|
-- Flags
|
||
|
CREATE TABLE IF NOT EXISTS booru_flags (
|
||
|
"id" varchar(255) NOT NULL,
|
||
|
"user" varchar(255) NOT NULL,
|
||
|
"service" varchar(20) NOT NULL
|
||
|
);
|
||
|
|
||
|
-- Lookup
|
||
|
CREATE TABLE IF NOT EXISTS lookup (
|
||
|
"id" varchar(255) NOT NULL,
|
||
|
"name" varchar(255) NOT NULL,
|
||
|
"service" varchar(20) NOT NULL,
|
||
|
"indexed" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
|
||
|
);
|
||
|
CREATE INDEX IF NOT EXISTS name_idx ON lookup USING btree ("name");
|
||
|
CREATE INDEX IF NOT EXISTS lookup_id_idx ON lookup USING btree ("id");
|
||
|
CREATE INDEX IF NOT EXISTS lookup_service_idx ON lookup USING btree ("service");
|
||
|
CREATE INDEX IF NOT EXISTS lookup_indexed_idx ON lookup USING btree ("indexed");
|
||
|
|
||
|
-- Board
|
||
|
CREATE TABLE IF NOT EXISTS board_replies (
|
||
|
"reply" integer NOT NULL,
|
||
|
"in" integer NOT NULL
|
||
|
);
|
||
|
|
||
|
-- Requests
|
||
|
DO $$ BEGIN
|
||
|
CREATE TYPE request_status AS ENUM ('open', 'fulfilled', 'closed');
|
||
|
EXCEPTION
|
||
|
WHEN duplicate_object THEN null;
|
||
|
END $$;
|
||
|
CREATE TABLE IF NOT EXISTS requests (
|
||
|
"id" SERIAL PRIMARY KEY,
|
||
|
"service" varchar(20) NOT NULL,
|
||
|
"user" varchar(255) NOT NULL,
|
||
|
"post_id" varchar(255),
|
||
|
"title" text NOT NULL,
|
||
|
"description" text NOT NULL DEFAULT '',
|
||
|
"created" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
|
"image" text,
|
||
|
"price" numeric NOT NULL,
|
||
|
"votes" integer NOT NULL DEFAULT 1,
|
||
|
"ips" text[] NOT NULL,
|
||
|
"status" request_status NOT NULL DEFAULT 'open'
|
||
|
);
|
||
|
CREATE INDEX IF NOT EXISTS request_title_idx ON requests USING btree ("title");
|
||
|
CREATE INDEX IF NOT EXISTS request_service_idx ON requests USING btree ("service");
|
||
|
CREATE INDEX IF NOT EXISTS request_votes_idx ON requests USING btree ("votes");
|
||
|
CREATE INDEX IF NOT EXISTS request_created_idx ON requests USING btree ("created");
|
||
|
CREATE INDEX IF NOT EXISTS request_price_idx ON requests USING btree ("price");
|
||
|
CREATE INDEX IF NOT EXISTS request_status_idx ON requests USING btree ("status");
|
||
|
|
||
|
-- Request Subscriptions
|
||
|
CREATE TABLE IF NOT EXISTS request_subscriptions (
|
||
|
"request_id" numeric NOT NULL,
|
||
|
"endpoint" text NOT NULL,
|
||
|
"expirationTime" numeric,
|
||
|
"keys" jsonb NOT NULL
|
||
|
);
|
||
|
CREATE INDEX IF NOT EXISTS request_id_idx ON request_subscriptions USING btree ("request_id");
|
||
|
|
||
|
-- Logs
|
||
|
CREATE TABLE IF NOT EXISTS logs (
|
||
|
"log0" text NOT NULL,
|
||
|
"log" text[] NOT NULL,
|
||
|
"created" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
|
||
|
);
|
||
|
CREATE INDEX IF NOT EXISTS log_idx ON logs USING GIN (to_tsvector('english', log0));
|