2024-11-06 10:47:56 +00:00
|
|
|
-- +goose Up
|
|
|
|
|
2024-11-07 10:09:13 +00:00
|
|
|
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)
|
|
|
|
);
|
2024-11-06 10:47:56 +00:00
|
|
|
|
2024-11-07 10:09:13 +00:00
|
|
|
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
|
|
|
|
);
|
2024-11-06 10:47:56 +00:00
|
|
|
|
2024-11-07 10:09:13 +00:00
|
|
|
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`;
|