-- Migration: Create playlists and playlist_tracks tables -- T0296: Create Playlist Database Model CREATE TABLE IF NOT EXISTS playlists ( id BIGSERIAL PRIMARY KEY, user_id BIGINT NOT NULL REFERENCES users(id) ON DELETE CASCADE, title VARCHAR(200) NOT NULL, description TEXT, is_public BOOLEAN DEFAULT TRUE, cover_url VARCHAR(500), track_count INTEGER DEFAULT 0, created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ); CREATE TABLE IF NOT EXISTS playlist_tracks ( id BIGSERIAL PRIMARY KEY, playlist_id BIGINT NOT NULL REFERENCES playlists(id) ON DELETE CASCADE, track_id BIGINT NOT NULL REFERENCES tracks(id) ON DELETE CASCADE, position INTEGER NOT NULL, added_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, UNIQUE(playlist_id, track_id) ); -- Indexes for performance CREATE INDEX IF NOT EXISTS idx_playlists_user_id ON playlists(user_id); CREATE INDEX IF NOT EXISTS idx_playlist_tracks_playlist_id ON playlist_tracks(playlist_id); CREATE INDEX IF NOT EXISTS idx_playlist_tracks_track_id ON playlist_tracks(track_id); CREATE INDEX IF NOT EXISTS idx_playlist_tracks_position ON playlist_tracks(playlist_id, position);