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");
 |