-- +migrate Up CREATE TYPE Rating AS ENUM ( 'safe', 'questionable', 'explicit' ); CREATE TYPE TagType AS ENUM ( 'general', 'species', 'character', 'artist', 'lore', 'meta', 'invalid', 'copyright' ); CREATE TABLE "Post" ( id CHAR(25) PRIMARY KEY, rating Rating, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, deleted_at TIMESTAMP NULL NULL ); CREATE TABLE "Source" ( id CHAR(25) PRIMARY KEY, display_name TEXT NULL, icon TEXT NULL, domain TEXT NOT NULL UNIQUE, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, deleted_at TIMESTAMP NULL ); CREATE TABLE "Tag" ( name TEXT PRIMARY KEY, tag_type TagType, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, deleted_at TIMESTAMP NULL ); CREATE TABLE "User" ( id TEXT PRIMARY KEY, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, deleted_at TIMESTAMP NULL ); CREATE TABLE "PostReference" ( post_id TEXT REFERENCES "Post" (id), source_id TEXT REFERENCES "Source" (id), url TEXT NOT NULL, full_file_url TEXT, preview_file_url TEXT, sample_file_url TEXT, source_post_id TEXT, PRIMARY KEY (post_id, source_id, url) ); CREATE TABLE "TagAlias" ( name TEXT PRIMARY KEY, tag_id TEXT REFERENCES "Tag" (name), created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); CREATE TABLE "TagGroup" ( name TEXT PRIMARY KEY, tag_id TEXT REFERENCES "Tag" (name), created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); CREATE TABLE "UserSource" ( id CHAR(25) PRIMARY KEY, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, deleted_at TIMESTAMP NULL NULL, user_id TEXT REFERENCES "User" (id), source_id TEXT REFERENCES "Source" (id), scrape_time_interval INT, account_username TEXT, account_id TEXT, last_scrape_time TIMESTAMP, account_validate BOOL DEFAULT FALSE, account_validation_key CHAR(25), UNIQUE (source_id, account_username, account_id) ); CREATE TABLE "UserFavorites" ( id CHAR(25) PRIMARY KEY, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, deleted_at TIMESTAMP NULL NULL, user_id TEXT REFERENCES "User" (id), post_id TEXT REFERENCES "Post" (id), user_source_id CHAR(25) REFERENCES "UserSource" (id) ); CREATE TABLE "post_tags" ( post_id TEXT REFERENCES "Post" (id), tag_name TEXT REFERENCES "Tag" (name), PRIMARY KEY (post_id, tag_name) );