53 lines
1.6 KiB
SQL
53 lines
1.6 KiB
SQL
-- accounts
|
|
CREATE TABLE account(
|
|
id serial PRIMARY KEY,
|
|
username varchar NOT NULL,
|
|
password_hash varchar NOT NULL,
|
|
created_at timestamp without time zone NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
role varchar DEFAULT 'consumer',
|
|
UNIQUE (username)
|
|
);
|
|
|
|
CREATE TABLE account_artist_favorite(
|
|
id serial,
|
|
created_at timestamp NULL DEFAULT CURRENT_TIMESTAMP,
|
|
account_id int NOT NULL REFERENCES account(id),
|
|
service varchar(20) NOT NULL,
|
|
artist_id varchar(255) NOT NULL,
|
|
PRIMARY KEY (service, id),
|
|
UNIQUE (account_id, service, artist_id)
|
|
);
|
|
|
|
CREATE INDEX ON account_artist_favorite(service, artist_id);
|
|
|
|
CREATE TABLE account_post_favorite(
|
|
id serial,
|
|
created_at timestamp NULL DEFAULT CURRENT_TIMESTAMP,
|
|
account_id int NOT NULL REFERENCES account(id),
|
|
service varchar(20) NOT NULL,
|
|
artist_id varchar(255) NOT NULL,
|
|
post_id varchar(255) NOT NULL,
|
|
PRIMARY KEY (service, id),
|
|
UNIQUE (account_id, service, artist_id, post_id)
|
|
);
|
|
|
|
CREATE TABLE notifications(
|
|
id bigserial PRIMARY KEY,
|
|
account_id int NOT NULL,
|
|
type SMALLINT NOT NULL,
|
|
extra_info jsonb,
|
|
created_at timestamp without time zone NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
is_seen boolean NOT NULL DEFAULT FALSE,
|
|
FOREIGN KEY (account_id) REFERENCES account(id)
|
|
);
|
|
|
|
CREATE INDEX account_idx ON account USING BTREE(username, created_at, ROLE);
|
|
|
|
CREATE INDEX ON account_post_favorite(service, artist_id, post_id);
|
|
|
|
CREATE INDEX notifications_account_id_idx ON notifications USING BTREE("account_id");
|
|
|
|
CREATE INDEX notifications_created_at_idx ON notifications USING BTREE("created_at");
|
|
|
|
CREATE INDEX notifications_type_idx ON notifications USING BTREE("type");
|