96 lines
2.9 KiB
PL/PgSQL
96 lines
2.9 KiB
PL/PgSQL
-- Downloaded from: https://github.com/Ansh-Rathod/Musive-backend-2.0/blob/eb320d80d2fa07283bb4ab9351581f4c8757bcad/schema.sql
|
|
create table Users(
|
|
id serial primary key,
|
|
username varchar(28) not null unique,
|
|
passhash varchar not null
|
|
);
|
|
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
|
|
|
|
create table public."Artists"(
|
|
id integer unique not null,
|
|
username text not null unique,
|
|
display_name text not null,
|
|
avatar jsonb,
|
|
gender varchar,
|
|
PRIMARY KEY(id)
|
|
);
|
|
|
|
create table public."Tracks"(
|
|
id integer unique not null,
|
|
user_id integer not null,
|
|
tags text[] not null DEFAULT '{}',
|
|
moods text[] not null DEFAULT '{}',
|
|
genres text[] not null DEFAULT '{}',
|
|
movements text[] not null DEFAULT '{}',
|
|
keywords text not null,
|
|
duration float not null,
|
|
track_name text not null,
|
|
download_url text not null,
|
|
src text not null,
|
|
cover_image jsonb,
|
|
PRIMARY KEY(id)
|
|
);
|
|
|
|
alter table if exists songs
|
|
add constraint user_id_fk FOREIGN KEY (user_id) REFERENCES artists(id)
|
|
match full on update CASCADE on delete CASCADE;
|
|
|
|
create table public."Liked"(
|
|
id serial primary key,
|
|
track_id integer not null,
|
|
username varchar(28) not null
|
|
);
|
|
|
|
alter table public."Liked" add constraint track_id FOREIGN KEY(track_id)
|
|
REFERENCES public."Tracks"(id) match full on update CASCADE on delete cascade;
|
|
|
|
alter table public."Liked" add constraint user_id FOREIGN KEY(username)
|
|
REFERENCES public."Users"(username) match full on update CASCADE on delete cascade;
|
|
|
|
create table public."Collections"(
|
|
id uuid PRIMARY KEY NOT NULL DEFAULT uuid_generate_v4(),
|
|
name text not null,
|
|
username varchar(28) not null,
|
|
total_tracks integer DEFAULT 0
|
|
);
|
|
|
|
alter table public."Collections" add constraint user_id FOREIGN KEY(username)
|
|
REFERENCES public."Users"(username) match full on update CASCADE on delete cascade;
|
|
|
|
create table public."CollectionItems"(
|
|
collection_id uuid not null,
|
|
track_id integer not null
|
|
);
|
|
|
|
|
|
alter table public."CollectionItems" add constraint collection_id_fk FOREIGN KEY(collection_id)
|
|
REFERENCES public."Collections"(id) match full on update CASCADE on delete cascade;
|
|
|
|
alter table public."CollectionItems" add constraint track_id_fk FOREIGN KEY(track_id)
|
|
REFERENCES public."Tracks"(id) match full on update CASCADE on delete cascade;
|
|
|
|
|
|
CREATE OR REPLACE FUNCTION update_collections()
|
|
RETURNS trigger AS $$
|
|
DECLARE
|
|
BEGIN
|
|
IF TG_OP = 'INSERT' THEN
|
|
EXECUTE 'update public."Collections" set total_tracks=total_tracks+1 where id = $1;'
|
|
USING NEW.collection_id;
|
|
END IF;
|
|
|
|
IF TG_OP = 'DELETE' THEN
|
|
EXECUTE 'update public."Collections" set total_tracks=total_tracks-1 where id = $1;'
|
|
USING OLD.collection_id;
|
|
END IF;
|
|
|
|
RETURN NEW;
|
|
END;
|
|
$$ LANGUAGE plpgsql;
|
|
|
|
|
|
CREATE TRIGGER update_collection
|
|
AFTER INSERT OR DELETE ON public."CollectionItems"
|
|
FOR EACH ROW EXECUTE PROCEDURE update_collections();
|
|
|
|
-- pg_dump -U postgres -h containers-us-west-63.railway.app -p 7771 railway >> sqlfile.sql |