50 lines
2.4 KiB
SQL
50 lines
2.4 KiB
SQL
-- Migration 005: User Favorites and Listening History
|
|
-- Adds tables for track favorites/ratings and per-user listening history
|
|
-- Updated to support title-based storage (no tracks table dependency)
|
|
|
|
-- User favorites table - tracks that users have liked/rated
|
|
-- Supports both track-id (when tracks table is populated) and track_title (for now)
|
|
CREATE TABLE IF NOT EXISTS user_favorites (
|
|
_id SERIAL PRIMARY KEY,
|
|
"user-id" INTEGER NOT NULL REFERENCES "USERS"(_id) ON DELETE CASCADE,
|
|
"track-id" INTEGER, -- Optional: references tracks(_id) when available
|
|
track_title TEXT, -- Store title directly for title-based favorites
|
|
rating INTEGER DEFAULT 1 CHECK (rating >= 1 AND rating <= 5),
|
|
"created-date" TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|
);
|
|
|
|
-- Create indexes for efficient queries
|
|
CREATE INDEX IF NOT EXISTS idx_user_favorites_user_id ON user_favorites("user-id");
|
|
CREATE INDEX IF NOT EXISTS idx_user_favorites_track_id ON user_favorites("track-id");
|
|
CREATE INDEX IF NOT EXISTS idx_user_favorites_rating ON user_favorites(rating);
|
|
CREATE UNIQUE INDEX IF NOT EXISTS idx_user_favorites_unique ON user_favorites("user-id", COALESCE(track_title, ''));
|
|
|
|
-- User listening history - per-user track play history
|
|
-- Supports both track-id and track_title
|
|
CREATE TABLE IF NOT EXISTS listening_history (
|
|
_id SERIAL PRIMARY KEY,
|
|
"user-id" INTEGER NOT NULL REFERENCES "USERS"(_id) ON DELETE CASCADE,
|
|
"track-id" INTEGER, -- Optional: references tracks(_id) when available
|
|
track_title TEXT, -- Store title directly for title-based history
|
|
"listened-at" TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
"listen-duration" INTEGER DEFAULT 0, -- seconds listened
|
|
completed INTEGER DEFAULT 0 -- 1 if they listened to the whole track
|
|
);
|
|
|
|
-- Create indexes for efficient queries
|
|
CREATE INDEX IF NOT EXISTS idx_listening_history_user_id ON listening_history("user-id");
|
|
CREATE INDEX IF NOT EXISTS idx_listening_history_track_id ON listening_history("track-id");
|
|
CREATE INDEX IF NOT EXISTS idx_listening_history_listened_at ON listening_history("listened-at");
|
|
|
|
-- Grant permissions
|
|
GRANT ALL PRIVILEGES ON user_favorites TO asteroid;
|
|
GRANT ALL PRIVILEGES ON listening_history TO asteroid;
|
|
GRANT ALL PRIVILEGES ON SEQUENCE user_favorites__id_seq TO asteroid;
|
|
GRANT ALL PRIVILEGES ON SEQUENCE listening_history__id_seq TO asteroid;
|
|
|
|
-- Verification
|
|
DO $$
|
|
BEGIN
|
|
RAISE NOTICE 'Migration 005: User favorites and listening history tables created successfully!';
|
|
END $$;
|