diff --git a/persistence/artist_repository.go b/persistence/artist_repository.go index eb87ed00..0bb6215a 100644 --- a/persistence/artist_repository.go +++ b/persistence/artist_repository.go @@ -129,7 +129,12 @@ func NewArtistRepository(ctx context.Context, db dbx.Builder) model.ArtistReposi } func roleFilter(_ string, role any) Sqlizer { - return NotEq{fmt.Sprintf("stats ->> '$.%v'", role): nil} + if role, ok := role.(string); ok { + if _, ok := model.AllRoles[role]; ok { + return NotEq{fmt.Sprintf("stats ->> '$.%v'", role): nil} + } + } + return Eq{"1": 2} } func (r *artistRepository) selectArtist(options ...model.QueryOptions) SelectBuilder { diff --git a/persistence/artist_repository_test.go b/persistence/artist_repository_test.go index 0c7018dc..e4f7656b 100644 --- a/persistence/artist_repository_test.go +++ b/persistence/artist_repository_test.go @@ -321,4 +321,26 @@ var _ = Describe("ArtistRepository", func() { }) }) }) + + Describe("roleFilter", func() { + It("filters out roles not present in the participants model", func() { + Expect(roleFilter("", "artist")).To(Equal(squirrel.NotEq{"stats ->> '$.artist'": nil})) + Expect(roleFilter("", "albumartist")).To(Equal(squirrel.NotEq{"stats ->> '$.albumartist'": nil})) + Expect(roleFilter("", "composer")).To(Equal(squirrel.NotEq{"stats ->> '$.composer'": nil})) + Expect(roleFilter("", "conductor")).To(Equal(squirrel.NotEq{"stats ->> '$.conductor'": nil})) + Expect(roleFilter("", "lyricist")).To(Equal(squirrel.NotEq{"stats ->> '$.lyricist'": nil})) + Expect(roleFilter("", "arranger")).To(Equal(squirrel.NotEq{"stats ->> '$.arranger'": nil})) + Expect(roleFilter("", "producer")).To(Equal(squirrel.NotEq{"stats ->> '$.producer'": nil})) + Expect(roleFilter("", "director")).To(Equal(squirrel.NotEq{"stats ->> '$.director'": nil})) + Expect(roleFilter("", "engineer")).To(Equal(squirrel.NotEq{"stats ->> '$.engineer'": nil})) + Expect(roleFilter("", "mixer")).To(Equal(squirrel.NotEq{"stats ->> '$.mixer'": nil})) + Expect(roleFilter("", "remixer")).To(Equal(squirrel.NotEq{"stats ->> '$.remixer'": nil})) + Expect(roleFilter("", "djmixer")).To(Equal(squirrel.NotEq{"stats ->> '$.djmixer'": nil})) + Expect(roleFilter("", "performer")).To(Equal(squirrel.NotEq{"stats ->> '$.performer'": nil})) + + Expect(roleFilter("", "wizard")).To(Equal(squirrel.Eq{"1": 2})) + Expect(roleFilter("", "songanddanceman")).To(Equal(squirrel.Eq{"1": 2})) + Expect(roleFilter("", "artist') SELECT LIKE(CHAR(65,66,67,68,69,70,71),UPPER(HEX(RANDOMBLOB(500000000/2))))--")).To(Equal(squirrel.Eq{"1": 2})) + }) + }) })