-- -- Migration -- -- Move existing tables to new schema ALTER TABLE public.artist SET SCHEMA arimelody; ALTER TABLE public.musicrelease SET SCHEMA arimelody; ALTER TABLE public.musiclink SET SCHEMA arimelody; ALTER TABLE public.musiccredit SET SCHEMA arimelody; ALTER TABLE public.musictrack SET SCHEMA arimelody; ALTER TABLE public.musicreleasetrack SET SCHEMA arimelody; -- -- New items -- -- Acounts CREATE TABLE arimelody.account ( id uuid DEFAULT gen_random_uuid(), username text NOT NULL UNIQUE, password text NOT NULL, email text, avatar_url text, created_at TIMESTAMP DEFAULT current_timestamp ); ALTER TABLE arimelody.account ADD CONSTRAINT account_pk PRIMARY KEY (id); -- Privilege CREATE TABLE arimelody.privilege ( account uuid NOT NULL, privilege text NOT NULL ); ALTER TABLE arimelody.privilege ADD CONSTRAINT privilege_pk PRIMARY KEY (account, privilege); -- Invites CREATE TABLE arimelody.invite ( code text NOT NULL, created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, expires_at TIMESTAMP NOT NULL ); ALTER TABLE arimelody.invite ADD CONSTRAINT invite_pk PRIMARY KEY (code); -- Tokens CREATE TABLE arimelody.token ( token TEXT, account UUID NOT NULL, user_agent TEXT NOT NULL, created_at TIMESTAMP NOT NULL DEFAULT current_timestamp, expires_at TIMESTAMP DEFAULT NULL ); ALTER TABLE arimelody.token ADD CONSTRAINT token_pk PRIMARY KEY (token); -- TOTPs CREATE TABLE arimelody.totp ( name TEXT NOT NULL, account UUID NOT NULL, secret TEXT, created_at TIMESTAMP NOT NULL DEFAULT current_timestamp ); ALTER TABLE arimelody.totp ADD CONSTRAINT totp_pk PRIMARY KEY (account, name); -- Foreign keys ALTER TABLE arimelody.privilege ADD CONSTRAINT privilege_account_fk FOREIGN KEY (account) REFERENCES account(id) ON DELETE CASCADE; ALTER TABLE arimelody.token ADD CONSTRAINT token_account_fk FOREIGN KEY (account) REFERENCES account(id) ON DELETE CASCADE; ALTER TABLE arimelody.totp ADD CONSTRAINT totp_account_fk FOREIGN KEY (account) REFERENCES account(id) ON DELETE CASCADE;