-- +goose Up CREATE TABLE `applications` ( id serial NOT NULL, name varchar(255) NOT NULL, user_id varchar(255) NOT NULL, created_at timestamp DEFAULT CURRENT_TIMESTAMP, updated_at timestamp DEFAULT CURRENT_TIMESTAMP, primary key (id), index (user_id) ); CREATE TABLE `application_tokens` ( id serial NOT NULL, token varchar(255) NOT NULL, application_id bigint unsigned NOT NULL, created_at timestamp DEFAULT CURRENT_TIMESTAMP, updated_at timestamp DEFAULT CURRENT_TIMESTAMP, primary key (id), index (token), foreign key (application_id) references applications (id) on delete cascade ); CREATE TABLE `categories` ( id serial NOT NULL, name varchar(255) NOT NULL, application_id bigint unsigned NOT NULL, primary key (id), foreign key (application_id) references applications (id) on delete cascade ); CREATE TABLE `tags` ( id serial NOT NULL, name varchar(255) NOT NULL, application_id bigint unsigned NOT NULL, primary key (id), foreign key (application_id) references applications (id) on delete cascade ); CREATE TABLE `tag_mapping` ( id serial NOT NULL, tag_id bigint unsigned NOT NULL, name varchar(255) NOT NULL, application_id bigint unsigned NOT NULL, primary key (id), foreign key (tag_id) references tags (id) on delete cascade, foreign key (application_id) references applications (id) on delete cascade, index (tag_id, name, application_id) ); CREATE TABLE `posts` ( id serial NOT NULL, target_id VARCHAR(255) NOT NULL, title varchar(255) NOT NULL, content LONGTEXT NOT NULL, application_id bigint unsigned NOT NULL, processed BOOLEAN DEFAULT FALSE, created_at timestamp DEFAULT CURRENT_TIMESTAMP, updated_at timestamp DEFAULT CURRENT_TIMESTAMP, index (target_id, processed, application_id), primary key (id), foreign key (application_id) references applications (id) on delete cascade ); CREATE TABLE `post_tags` ( id serial NOT NULL, post_id bigint unsigned NOT NULL, tag_id bigint unsigned NOT NULL, primary key (id), foreign key (post_id) references posts (id) on delete cascade, foreign key (tag_id) references tags (id) on delete cascade, index (post_id, tag_id) ); -- user tag scores CREATE TABLE `user_tag_scores` ( user_id varchar(255) NOT NULL, tag_id bigint unsigned NOT NULL, score int NOT NULL, application_id bigint unsigned NOT NULL, primary key (user_id, tag_id), index (score, application_id), foreign key (tag_id) references tags (id) on delete cascade, foreign key (application_id) references applications (id) on delete cascade ); -- user likes CREATE TABLE `user_likes` ( user_id varchar(255) NOT NULL, post_id bigint unsigned NOT NULL, type enum ('like', 'dislike') NOT NULL, application_id bigint unsigned NOT NULL, primary key (user_id, post_id), index (type, application_id), foreign key (post_id) references posts (id) on delete cascade, foreign key (application_id) references applications (id) on delete cascade ); -- +goose Down DROP TABLE IF EXISTS `tag_mapping`; DROP TABLE IF EXISTS `user_tag_scores`; DROP TABLE IF EXISTS `post_tags`; DROP TABLE IF EXISTS `user_likes`; DROP TABLE IF EXISTS `posts`; DROP TABLE IF EXISTS `tags`; DROP TABLE IF EXISTS `categories`; DROP TABLE IF EXISTS `application_tokens`; DROP TABLE IF EXISTS `applications`;