40 lines
1.5 KiB
SQL
40 lines
1.5 KiB
SQL
-- +goose Up
|
|
CREATE TABLE IF NOT EXISTS playlists (
|
|
id SERIAL PRIMARY KEY,
|
|
name VARCHAR(255) NOT NULL,
|
|
created_at TIMESTAMP NOT NULL DEFAULT NOW(),
|
|
updated_at TIMESTAMP NOT NULL DEFAULT NOW()
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS playlist_tracks (
|
|
id SERIAL PRIMARY KEY,
|
|
playlist_id INTEGER NOT NULL REFERENCES playlists(id) ON DELETE CASCADE,
|
|
name VARCHAR(255) NOT NULL,
|
|
filename TEXT NOT NULL UNIQUE,
|
|
position INTEGER NOT NULL DEFAULT 0,
|
|
created_at TIMESTAMP NOT NULL DEFAULT NOW()
|
|
);
|
|
|
|
ALTER TABLE scenarios ADD COLUMN IF NOT EXISTS playlist_id INTEGER REFERENCES playlists(id) ON DELETE RESTRICT;
|
|
ALTER TABLE games ADD COLUMN IF NOT EXISTS playlist_id INTEGER REFERENCES playlists(id) ON DELETE RESTRICT;
|
|
|
|
CREATE TABLE IF NOT EXISTS game_music_states (
|
|
game_id INTEGER PRIMARY KEY REFERENCES games(id) ON DELETE CASCADE,
|
|
playlist_id INTEGER REFERENCES playlists(id) ON DELETE RESTRICT,
|
|
track_index INTEGER NOT NULL DEFAULT 0,
|
|
position_ms BIGINT NOT NULL DEFAULT 0,
|
|
volume INTEGER NOT NULL DEFAULT 100,
|
|
loop BOOLEAN NOT NULL DEFAULT FALSE,
|
|
playback INTEGER NOT NULL DEFAULT 1,
|
|
state_version BIGINT NOT NULL DEFAULT 1,
|
|
started_at TIMESTAMPTZ,
|
|
updated_at TIMESTAMP NOT NULL DEFAULT NOW()
|
|
);
|
|
|
|
-- +goose Down
|
|
DROP TABLE IF EXISTS game_music_states;
|
|
ALTER TABLE games DROP COLUMN IF EXISTS playlist_id;
|
|
ALTER TABLE scenarios DROP COLUMN IF EXISTS playlist_id;
|
|
DROP TABLE IF EXISTS playlist_tracks;
|
|
DROP TABLE IF EXISTS playlists;
|