diff --git a/lib/music_library/artists.ex b/lib/music_library/artists.ex index 4bdbd08c..d0c54e19 100644 --- a/lib/music_library/artists.ex +++ b/lib/music_library/artists.ex @@ -31,6 +31,16 @@ defmodule MusicLibrary.Artists do end end + def name_id_pairs(names) do + q = + from ar in ArtistRecord, + distinct: true, + where: fragment("artist ->> '$.name'") in ^names, + select: {fragment("artist ->> '$.name'"), ar.musicbrainz_id} + + Repo.all(q) + end + def get_all_artist_ids do q = from ar in ArtistRecord, distinct: true, select: ar.musicbrainz_id diff --git a/lib/music_library/scrobble_activity/backfill.ex b/lib/music_library/scrobble_activity/backfill.ex new file mode 100644 index 00000000..8a8855c5 --- /dev/null +++ b/lib/music_library/scrobble_activity/backfill.ex @@ -0,0 +1,36 @@ +defmodule MusicLibrary.ScrobbleActivity.Backfill do + alias MusicLibrary.Artists + alias MusicLibrary.Repo + + @allowed_artists [ + "IQ", + "Riverside", + "Airbag", + "Arena", + "Fish", + "Marillion", + "Porcupine Tree", + "Steven Wilson", + "Gazpacho", + "Sylvan", + "Dream Theater", + "Pink Floyd", + "Muse", + "Opeth" + ] + + def fill_missing_artist_ids do + name_id_pairs = Artists.name_id_pairs(@allowed_artists) + + Enum.each(name_id_pairs, fn {name, id} -> + Repo.query( + """ + UPDATE scrobbled_tracks + SET artist = json_set(artist, '$.musicbrainz_id', ?) + WHERE artist ->> '$.name' == ?; + """, + [id, name] + ) + end) + end +end