Files
MoonTVPlus/migrations/postgres/005_music_v2.sql
T

59 lines
1.9 KiB
SQL

-- Music V2 schema
CREATE TABLE IF NOT EXISTS music_v2_history (
id BIGSERIAL PRIMARY KEY,
username TEXT NOT NULL,
song_id TEXT NOT NULL,
source TEXT NOT NULL,
songmid TEXT,
name TEXT NOT NULL,
artist TEXT NOT NULL,
album TEXT,
cover TEXT,
duration_text TEXT,
duration_sec DOUBLE PRECISION,
play_progress_sec DOUBLE PRECISION NOT NULL DEFAULT 0,
last_played_at BIGINT NOT NULL,
play_count INTEGER NOT NULL DEFAULT 0,
last_quality TEXT,
created_at BIGINT NOT NULL,
updated_at BIGINT NOT NULL,
UNIQUE(username, song_id),
FOREIGN KEY (username) REFERENCES users(username) ON DELETE CASCADE
);
CREATE INDEX IF NOT EXISTS idx_music_v2_history_username ON music_v2_history(username, last_played_at DESC);
CREATE TABLE IF NOT EXISTS music_v2_playlists (
id TEXT PRIMARY KEY,
username TEXT NOT NULL,
name TEXT NOT NULL,
description TEXT,
cover TEXT,
song_count INTEGER NOT NULL DEFAULT 0,
created_at BIGINT NOT NULL,
updated_at BIGINT NOT NULL,
FOREIGN KEY (username) REFERENCES users(username) ON DELETE CASCADE
);
CREATE INDEX IF NOT EXISTS idx_music_v2_playlists_username ON music_v2_playlists(username, updated_at DESC);
CREATE TABLE IF NOT EXISTS music_v2_playlist_items (
id BIGSERIAL PRIMARY KEY,
playlist_id TEXT NOT NULL,
username TEXT NOT NULL,
song_id TEXT NOT NULL,
source TEXT NOT NULL,
songmid TEXT,
name TEXT NOT NULL,
artist TEXT NOT NULL,
album TEXT,
cover TEXT,
duration_text TEXT,
duration_sec DOUBLE PRECISION,
sort_order INTEGER NOT NULL DEFAULT 0,
added_at BIGINT NOT NULL,
updated_at BIGINT NOT NULL,
UNIQUE(playlist_id, song_id),
FOREIGN KEY (playlist_id) REFERENCES music_v2_playlists(id) ON DELETE CASCADE,
FOREIGN KEY (username) REFERENCES users(username) ON DELETE CASCADE
);
CREATE INDEX IF NOT EXISTS idx_music_v2_playlist_items_playlist ON music_v2_playlist_items(playlist_id, sort_order ASC);