Merge pull request 'Hotfix v2026.05.15.1 — allow discovery-mix variants in playlists CHECK constraints' (#49) from dev into main

This commit was merged in pull request #49.
This commit is contained in:
2026-05-16 00:32:25 -04:00
3 changed files with 72 additions and 1 deletions
+1 -1
View File
@@ -1,7 +1,7 @@
name: minstrel
description: Minstrel mobile client
publish_to: 'none'
version: 2026.5.15+6
version: 2026.5.15+7
environment:
sdk: '>=3.5.0 <4.0.0'
@@ -0,0 +1,24 @@
-- Reverts to the 0021 constraint set (for_you, songs_like_artist,
-- discover only). Fails if any playlists row still has one of the
-- five new system_variant values — delete/rebuild system playlists
-- first if rolling back.
ALTER TABLE playlists DROP CONSTRAINT IF EXISTS playlists_kind_variant_consistent;
ALTER TABLE playlists
ADD CONSTRAINT playlists_kind_variant_consistent CHECK (
(kind = 'user' AND system_variant IS NULL)
OR
(kind = 'system' AND system_variant IN ('for_you', 'songs_like_artist', 'discover'))
);
ALTER TABLE playlists DROP CONSTRAINT IF EXISTS playlists_seed_consistent;
ALTER TABLE playlists
ADD CONSTRAINT playlists_seed_consistent CHECK (
(system_variant IS NULL AND seed_artist_id IS NULL)
OR
(system_variant = 'for_you' AND seed_artist_id IS NULL)
OR
(system_variant = 'discover' AND seed_artist_id IS NULL)
OR
(system_variant = 'songs_like_artist' AND seed_artist_id IS NOT NULL)
);
@@ -0,0 +1,47 @@
-- #411 R3 bugfix: the five discovery mixes (deep_cuts, rediscover,
-- new_for_you, on_this_day, first_listens) were added as producers +
-- registry entries but their system_variant values were never added
-- to the two playlists CHECK constraints. Result: insertSystemPlaylist
-- for any new mix fails with playlists_kind_variant_consistent
-- (SQLSTATE 23514), which — because BuildSystemPlaylists is one
-- all-or-nothing transaction — aborts the WHOLE build, so For-You /
-- Discover refresh 500s and the lazy daily build fails too.
--
-- All five are seedless (like for_you/discover): seed_artist_id IS
-- NULL. Drop + re-add both constraints with the expanded set, same
-- pattern as 0021_discover_variant (Postgres has no ALTER CONSTRAINT
-- for CHECK).
ALTER TABLE playlists DROP CONSTRAINT IF EXISTS playlists_kind_variant_consistent;
ALTER TABLE playlists
ADD CONSTRAINT playlists_kind_variant_consistent CHECK (
(kind = 'user' AND system_variant IS NULL)
OR
(kind = 'system' AND system_variant IN (
'for_you', 'songs_like_artist', 'discover',
'deep_cuts', 'rediscover', 'new_for_you',
'on_this_day', 'first_listens'
))
);
ALTER TABLE playlists DROP CONSTRAINT IF EXISTS playlists_seed_consistent;
ALTER TABLE playlists
ADD CONSTRAINT playlists_seed_consistent CHECK (
(system_variant IS NULL AND seed_artist_id IS NULL)
OR
(system_variant = 'for_you' AND seed_artist_id IS NULL)
OR
(system_variant = 'discover' AND seed_artist_id IS NULL)
OR
(system_variant = 'deep_cuts' AND seed_artist_id IS NULL)
OR
(system_variant = 'rediscover' AND seed_artist_id IS NULL)
OR
(system_variant = 'new_for_you' AND seed_artist_id IS NULL)
OR
(system_variant = 'on_this_day' AND seed_artist_id IS NULL)
OR
(system_variant = 'first_listens' AND seed_artist_id IS NULL)
OR
(system_variant = 'songs_like_artist' AND seed_artist_id IS NOT NULL)
);