-- M2 likes: three tables, one per entity type. Schema follows the spec ยง5 -- pattern (general_likes was originally track-only); this slice extends it -- to albums and artists for full Subsonic star/unstar support. CREATE TABLE general_likes ( user_id uuid NOT NULL REFERENCES users(id) ON DELETE CASCADE, track_id uuid NOT NULL REFERENCES tracks(id) ON DELETE CASCADE, liked_at timestamptz NOT NULL DEFAULT now(), PRIMARY KEY (user_id, track_id) ); CREATE INDEX general_likes_user_liked_at_idx ON general_likes (user_id, liked_at DESC); CREATE TABLE general_likes_albums ( user_id uuid NOT NULL REFERENCES users(id) ON DELETE CASCADE, album_id uuid NOT NULL REFERENCES albums(id) ON DELETE CASCADE, liked_at timestamptz NOT NULL DEFAULT now(), PRIMARY KEY (user_id, album_id) ); CREATE INDEX general_likes_albums_user_liked_at_idx ON general_likes_albums (user_id, liked_at DESC); CREATE TABLE general_likes_artists ( user_id uuid NOT NULL REFERENCES users(id) ON DELETE CASCADE, artist_id uuid NOT NULL REFERENCES artists(id) ON DELETE CASCADE, liked_at timestamptz NOT NULL DEFAULT now(), PRIMARY KEY (user_id, artist_id) ); CREATE INDEX general_likes_artists_user_liked_at_idx ON general_likes_artists (user_id, liked_at DESC);