2025-01-20 11:47:38 +00:00
|
|
|
--
|
2025-01-20 18:54:03 +00:00
|
|
|
-- Tables
|
2025-01-20 11:47:38 +00:00
|
|
|
--
|
2025-01-20 18:54:03 +00:00
|
|
|
|
2025-02-06 13:45:33 +00:00
|
|
|
-- Audit logs
|
|
|
|
CREATE TABLE arimelody.auditlog (
|
|
|
|
id UUID DEFAULT gen_random_uuid(),
|
|
|
|
level int NOT NULL DEFAULT 0,
|
|
|
|
type TEXT NOT NULL,
|
|
|
|
content TEXT NOT NULL,
|
|
|
|
created_at TIMESTAMP NOT NULL DEFAULT current_timestamp
|
|
|
|
);
|
|
|
|
|
2025-01-20 18:54:03 +00:00
|
|
|
-- Accounts
|
2025-01-20 11:47:38 +00:00
|
|
|
CREATE TABLE arimelody.account (
|
2025-01-23 09:39:40 +00:00
|
|
|
id UUID DEFAULT gen_random_uuid(),
|
|
|
|
username TEXT NOT NULL UNIQUE,
|
|
|
|
password TEXT NOT NULL,
|
|
|
|
email TEXT,
|
|
|
|
avatar_url TEXT,
|
2025-02-06 13:45:33 +00:00
|
|
|
created_at TIMESTAMP NOT NULL DEFAULT current_timestamp
|
2025-01-20 11:47:38 +00:00
|
|
|
);
|
|
|
|
ALTER TABLE arimelody.account ADD CONSTRAINT account_pk PRIMARY KEY (id);
|
|
|
|
|
|
|
|
-- Privilege
|
|
|
|
CREATE TABLE arimelody.privilege (
|
2025-01-23 09:39:40 +00:00
|
|
|
account UUID NOT NULL,
|
|
|
|
privilege TEXT NOT NULL
|
2025-01-20 11:47:38 +00:00
|
|
|
);
|
|
|
|
ALTER TABLE arimelody.privilege ADD CONSTRAINT privilege_pk PRIMARY KEY (account, privilege);
|
|
|
|
|
|
|
|
-- Invites
|
|
|
|
CREATE TABLE arimelody.invite (
|
|
|
|
code text NOT NULL,
|
2025-01-26 20:37:20 +00:00
|
|
|
created_at TIMESTAMP NOT NULL DEFAULT current_timestamp,
|
2025-01-20 11:47:38 +00:00
|
|
|
expires_at TIMESTAMP NOT NULL
|
|
|
|
);
|
|
|
|
ALTER TABLE arimelody.invite ADD CONSTRAINT invite_pk PRIMARY KEY (code);
|
|
|
|
|
2025-01-26 20:37:20 +00:00
|
|
|
-- Sessions
|
2025-01-23 00:37:19 +00:00
|
|
|
CREATE TABLE arimelody.session (
|
2025-01-20 15:08:01 +00:00
|
|
|
token TEXT,
|
|
|
|
user_agent TEXT NOT NULL,
|
|
|
|
created_at TIMESTAMP NOT NULL DEFAULT current_timestamp,
|
2025-01-23 09:39:40 +00:00
|
|
|
expires_at TIMESTAMP DEFAULT NULL,
|
2025-01-23 00:37:19 +00:00
|
|
|
account UUID,
|
2025-01-26 23:41:35 +00:00
|
|
|
attempt_account UUID,
|
2025-01-23 00:37:19 +00:00
|
|
|
message TEXT,
|
2025-01-23 09:39:40 +00:00
|
|
|
error TEXT
|
2025-01-20 15:08:01 +00:00
|
|
|
);
|
2025-01-23 09:39:40 +00:00
|
|
|
ALTER TABLE arimelody.session ADD CONSTRAINT session_pk PRIMARY KEY (token);
|
2025-01-20 15:08:01 +00:00
|
|
|
|
2025-01-26 20:37:20 +00:00
|
|
|
-- TOTP methods
|
2025-01-20 23:49:54 +00:00
|
|
|
CREATE TABLE arimelody.totp (
|
|
|
|
name TEXT NOT NULL,
|
|
|
|
account UUID NOT NULL,
|
|
|
|
secret TEXT,
|
2025-01-26 20:50:02 +00:00
|
|
|
created_at TIMESTAMP NOT NULL DEFAULT current_timestamp,
|
|
|
|
confirmed BOOLEAN DEFAULT false
|
2025-01-20 23:49:54 +00:00
|
|
|
);
|
|
|
|
ALTER TABLE arimelody.totp ADD CONSTRAINT totp_pk PRIMARY KEY (account, name);
|
|
|
|
|
|
|
|
|
2025-01-20 15:08:01 +00:00
|
|
|
|
2024-08-01 00:39:18 +00:00
|
|
|
-- Artists (should be applicable to all art)
|
2025-01-20 11:18:40 +00:00
|
|
|
CREATE TABLE arimelody.artist (
|
2024-08-02 23:27:30 +00:00
|
|
|
id character varying(64),
|
2024-08-01 23:53:19 +00:00
|
|
|
name text NOT NULL,
|
|
|
|
website text,
|
|
|
|
avatar text
|
2024-07-31 03:09:22 +00:00
|
|
|
);
|
2025-01-20 11:18:40 +00:00
|
|
|
ALTER TABLE arimelody.artist ADD CONSTRAINT artist_pk PRIMARY KEY (id);
|
2024-07-31 03:09:22 +00:00
|
|
|
|
2024-08-01 00:39:18 +00:00
|
|
|
-- Music releases
|
2025-01-20 11:18:40 +00:00
|
|
|
CREATE TABLE arimelody.musicrelease (
|
2024-07-31 03:09:22 +00:00
|
|
|
id character varying(64) NOT NULL,
|
2024-08-02 21:48:26 +00:00
|
|
|
visible bool DEFAULT false,
|
2024-07-31 03:09:22 +00:00
|
|
|
title text NOT NULL,
|
2024-08-01 00:39:18 +00:00
|
|
|
description text,
|
2024-07-31 03:09:22 +00:00
|
|
|
type text,
|
2024-08-05 00:23:17 +00:00
|
|
|
release_date TIMESTAMP NOT NULL,
|
2024-07-31 03:09:22 +00:00
|
|
|
artwork text,
|
|
|
|
buyname text,
|
2024-09-01 03:43:32 +00:00
|
|
|
buylink text,
|
|
|
|
copyright text,
|
2025-02-06 13:45:33 +00:00
|
|
|
copyrightURL text,
|
|
|
|
created_at TIMESTAMP NOT NULL DEFAULT current_timestamp,
|
2024-07-31 03:09:22 +00:00
|
|
|
);
|
2025-01-20 11:18:40 +00:00
|
|
|
ALTER TABLE arimelody.musicrelease ADD CONSTRAINT musicrelease_pk PRIMARY KEY (id);
|
2024-07-31 03:09:22 +00:00
|
|
|
|
2024-08-01 00:39:18 +00:00
|
|
|
-- Music links (external platform links under a release)
|
2025-01-20 11:18:40 +00:00
|
|
|
CREATE TABLE arimelody.musiclink (
|
2024-07-31 03:09:22 +00:00
|
|
|
release character varying(64) NOT NULL,
|
|
|
|
name text NOT NULL,
|
2024-08-01 23:53:19 +00:00
|
|
|
url text NOT NULL
|
2024-07-31 03:09:22 +00:00
|
|
|
);
|
2025-01-20 11:18:40 +00:00
|
|
|
ALTER TABLE arimelody.musiclink ADD CONSTRAINT musiclink_pk PRIMARY KEY (release, name);
|
2024-07-31 03:09:22 +00:00
|
|
|
|
2024-08-01 00:39:18 +00:00
|
|
|
-- Music credits (artist credits under a release)
|
2025-01-20 11:18:40 +00:00
|
|
|
CREATE TABLE arimelody.musiccredit (
|
2024-07-31 03:09:22 +00:00
|
|
|
release character varying(64) NOT NULL,
|
2024-08-02 21:48:26 +00:00
|
|
|
artist character varying(64) NOT NULL,
|
2024-08-01 23:53:19 +00:00
|
|
|
role text NOT NULL,
|
|
|
|
is_primary boolean DEFAULT false
|
2024-07-31 03:09:22 +00:00
|
|
|
);
|
2025-01-20 11:18:40 +00:00
|
|
|
ALTER TABLE arimelody.musiccredit ADD CONSTRAINT musiccredit_pk PRIMARY KEY (release, artist);
|
2024-07-31 03:09:22 +00:00
|
|
|
|
2024-08-01 00:39:18 +00:00
|
|
|
-- Music tracks (tracks under a release)
|
2025-01-20 11:18:40 +00:00
|
|
|
CREATE TABLE arimelody.musictrack (
|
2024-08-01 23:53:19 +00:00
|
|
|
id uuid DEFAULT gen_random_uuid(),
|
2024-07-31 03:09:22 +00:00
|
|
|
title text NOT NULL,
|
|
|
|
description text,
|
|
|
|
lyrics text,
|
2024-07-31 12:45:34 +00:00
|
|
|
preview_url text
|
2024-07-31 03:09:22 +00:00
|
|
|
);
|
2025-01-20 11:18:40 +00:00
|
|
|
ALTER TABLE arimelody.musictrack ADD CONSTRAINT musictrack_pk PRIMARY KEY (id);
|
2024-07-31 03:09:22 +00:00
|
|
|
|
2024-08-01 23:53:19 +00:00
|
|
|
-- Music release/track pairs
|
2025-01-20 11:18:40 +00:00
|
|
|
CREATE TABLE arimelody.musicreleasetrack (
|
2024-08-01 23:53:19 +00:00
|
|
|
release character varying(64) NOT NULL,
|
|
|
|
track uuid NOT NULL,
|
|
|
|
number integer NOT NULL
|
|
|
|
);
|
2025-01-20 11:18:40 +00:00
|
|
|
ALTER TABLE arimelody.musicreleasetrack ADD CONSTRAINT musicreleasetrack_pk PRIMARY KEY (release, track);
|
2024-07-31 03:09:22 +00:00
|
|
|
|
2025-01-20 18:54:03 +00:00
|
|
|
|
|
|
|
|
2024-08-01 23:53:19 +00:00
|
|
|
--
|
|
|
|
-- Foreign keys
|
|
|
|
--
|
2025-01-20 18:54:03 +00:00
|
|
|
|
2025-01-20 11:47:38 +00:00
|
|
|
ALTER TABLE arimelody.privilege ADD CONSTRAINT privilege_account_fk FOREIGN KEY (account) REFERENCES account(id) ON DELETE CASCADE;
|
2025-01-23 00:37:19 +00:00
|
|
|
ALTER TABLE arimelody.session ADD CONSTRAINT session_account_fk FOREIGN KEY (account) REFERENCES account(id) ON DELETE CASCADE;
|
2025-01-26 23:41:35 +00:00
|
|
|
ALTER TABLE arimelody.session ADD CONSTRAINT session_attempt_account_fk FOREIGN KEY (account) REFERENCES account(id) ON DELETE CASCADE;
|
2025-01-20 23:49:54 +00:00
|
|
|
ALTER TABLE arimelody.totp ADD CONSTRAINT totp_account_fk FOREIGN KEY (account) REFERENCES account(id) ON DELETE CASCADE;
|
2025-01-20 11:47:38 +00:00
|
|
|
|
2025-01-20 11:18:40 +00:00
|
|
|
ALTER TABLE arimelody.musiccredit ADD CONSTRAINT musiccredit_artist_fk FOREIGN KEY (artist) REFERENCES artist(id) ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
ALTER TABLE arimelody.musiccredit ADD CONSTRAINT musiccredit_release_fk FOREIGN KEY (release) REFERENCES musicrelease(id) ON DELETE CASCADE;
|
|
|
|
ALTER TABLE arimelody.musiclink ADD CONSTRAINT musiclink_release_fk FOREIGN KEY (release) REFERENCES musicrelease(id) ON UPDATE CASCADE ON DELETE CASCADE;
|
|
|
|
ALTER TABLE arimelody.musicreleasetrack ADD CONSTRAINT music_pair_trackref_fk FOREIGN KEY (release) REFERENCES musicrelease(id) ON DELETE CASCADE;
|
|
|
|
ALTER TABLE arimelody.musicreleasetrack ADD CONSTRAINT music_pair_releaseref_fk FOREIGN KEY (track) REFERENCES musictrack(id) ON DELETE CASCADE;
|