From 5cb3760b063e6515544288f62d0fd047f7952bc0 Mon Sep 17 00:00:00 2001 From: Slick Daddy <129640104+slick-daddy@users.noreply.github.com> Date: Fri, 8 May 2026 04:32:41 +0300 Subject: [PATCH 1/6] Merge pull request #4 from slick-daddy/codex/create-new-branch-patch-4 Add 'aliases' filter to Group (GraphQL, backend, tests, and UI) --- graphql/schema/types/filters.graphql | 2 ++ pkg/models/group.go | 1 + pkg/sqlite/group_filter.go | 1 + pkg/sqlite/group_test.go | 46 ++++++++++++++++++++++++ ui/v2.5/src/models/list-filter/groups.ts | 1 + 5 files changed, 51 insertions(+) diff --git a/graphql/schema/types/filters.graphql b/graphql/schema/types/filters.graphql index c7d880266..593ea7790 100644 --- a/graphql/schema/types/filters.graphql +++ b/graphql/schema/types/filters.graphql @@ -423,6 +423,8 @@ input GroupFilterType { NOT: GroupFilterType name: StringCriterionInput + "Filter by aliases" + aliases: StringCriterionInput director: StringCriterionInput synopsis: StringCriterionInput diff --git a/pkg/models/group.go b/pkg/models/group.go index 396384b51..3d4a37a3d 100644 --- a/pkg/models/group.go +++ b/pkg/models/group.go @@ -3,6 +3,7 @@ package models type GroupFilterType struct { OperatorFilter[GroupFilterType] Name *StringCriterionInput `json:"name"` + Aliases *StringCriterionInput `json:"aliases"` Director *StringCriterionInput `json:"director"` Synopsis *StringCriterionInput `json:"synopsis"` // Filter by duration (in seconds) diff --git a/pkg/sqlite/group_filter.go b/pkg/sqlite/group_filter.go index 63d056679..d5e5ce571 100644 --- a/pkg/sqlite/group_filter.go +++ b/pkg/sqlite/group_filter.go @@ -64,6 +64,7 @@ func (qb *groupFilterHandler) criterionHandler() criterionHandler { groupFilter := qb.groupFilter return compoundHandler{ stringCriterionHandler(groupFilter.Name, "groups.name"), + stringCriterionHandler(groupFilter.Aliases, "groups.aliases"), stringCriterionHandler(groupFilter.Director, "groups.director"), stringCriterionHandler(groupFilter.Synopsis, "groups.description"), intCriterionHandler(groupFilter.Rating100, "groups.rating", nil), diff --git a/pkg/sqlite/group_test.go b/pkg/sqlite/group_test.go index 22b551e02..fb0255fe3 100644 --- a/pkg/sqlite/group_test.go +++ b/pkg/sqlite/group_test.go @@ -885,6 +885,52 @@ func TestGroupQueryURL(t *testing.T) { verifyGroupQuery(t, filter, verifyFn) } +func TestGroupQueryAliases(t *testing.T) { + const groupIdx = 1 + groupAliases := getGroupStringValue(groupIdx, aliasesField) + + aliasesCriterion := models.StringCriterionInput{ + Value: groupAliases, + Modifier: models.CriterionModifierEquals, + } + + filter := models.GroupFilterType{ + Aliases: &aliasesCriterion, + } + + verifyFn := func(n *models.Group) { + t.Helper() + verifyString(t, n.Aliases, aliasesCriterion) + } + + verifyGroupQuery(t, filter, verifyFn) + + aliasesCriterion.Modifier = models.CriterionModifierNotEquals + verifyGroupQuery(t, filter, verifyFn) + + aliasesCriterion.Modifier = models.CriterionModifierIncludes + aliasesCriterion.Value = "oup_1_alia" + verifyGroupQuery(t, filter, verifyFn) + + aliasesCriterion.Modifier = models.CriterionModifierExcludes + aliasesCriterion.Value = "not-present-alias-substring" + verifyGroupQuery(t, filter, verifyFn) + + aliasesCriterion.Modifier = models.CriterionModifierMatchesRegex + aliasesCriterion.Value = "group_.*1_aliases" + verifyGroupQuery(t, filter, verifyFn) + + aliasesCriterion.Modifier = models.CriterionModifierNotMatchesRegex + verifyGroupQuery(t, filter, verifyFn) + + aliasesCriterion.Modifier = models.CriterionModifierIsNull + aliasesCriterion.Value = "" + verifyGroupQuery(t, filter, verifyFn) + + aliasesCriterion.Modifier = models.CriterionModifierNotNull + verifyGroupQuery(t, filter, verifyFn) +} + func TestGroupQueryURLExcludes(t *testing.T) { withRollbackTxn(func(ctx context.Context) error { mqb := db.Group diff --git a/ui/v2.5/src/models/list-filter/groups.ts b/ui/v2.5/src/models/list-filter/groups.ts index 9c5b3f2d4..7b03ca874 100644 --- a/ui/v2.5/src/models/list-filter/groups.ts +++ b/ui/v2.5/src/models/list-filter/groups.ts @@ -49,6 +49,7 @@ const criterionOptions = [ GroupIsMissingCriterionOption, createStringCriterionOption("url"), createStringCriterionOption("name"), + createStringCriterionOption("aliases"), createStringCriterionOption("director"), createStringCriterionOption("synopsis"), createDurationCriterionOption("duration"), From bb7db5a712eb037a0b057b10b7b488dbdf54e51f Mon Sep 17 00:00:00 2001 From: Slick Daddy <129640104+slick-daddy@users.noreply.github.com> Date: Fri, 8 May 2026 23:24:45 +0300 Subject: [PATCH 2/6] fix test --- pkg/sqlite/group_test.go | 1 + 1 file changed, 1 insertion(+) diff --git a/pkg/sqlite/group_test.go b/pkg/sqlite/group_test.go index fb0255fe3..acfdd063d 100644 --- a/pkg/sqlite/group_test.go +++ b/pkg/sqlite/group_test.go @@ -887,6 +887,7 @@ func TestGroupQueryURL(t *testing.T) { func TestGroupQueryAliases(t *testing.T) { const groupIdx = 1 + const aliasesField = "Aliases" groupAliases := getGroupStringValue(groupIdx, aliasesField) aliasesCriterion := models.StringCriterionInput{ From 0345b91f653e166f289722c4387dea9da6fc1339 Mon Sep 17 00:00:00 2001 From: Slick Daddy <129640104+slick-daddy@users.noreply.github.com> Date: Sat, 9 May 2026 00:02:23 +0300 Subject: [PATCH 3/6] fix --- pkg/sqlite/setup_test.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pkg/sqlite/setup_test.go b/pkg/sqlite/setup_test.go index 4ab310ee7..68febd07e 100644 --- a/pkg/sqlite/setup_test.go +++ b/pkg/sqlite/setup_test.go @@ -1521,7 +1521,8 @@ func createGroups(ctx context.Context, mqb models.GroupReaderWriter, n int, o in name = getGroupStringValue(index, name) group := models.Group{ - Name: name, + Name: name, + Aliases: getGroupStringValue(i, "Aliases"), URLs: models.NewRelatedStrings([]string{ getGroupEmptyString(i, urlField), }), From 5727575c9c847805593cb6ca715d91a16fa29cc4 Mon Sep 17 00:00:00 2001 From: Slick Daddy <129640104+slick-daddy@users.noreply.github.com> Date: Sat, 9 May 2026 00:31:54 +0300 Subject: [PATCH 4/6] fix test --- pkg/sqlite/setup_test.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pkg/sqlite/setup_test.go b/pkg/sqlite/setup_test.go index 68febd07e..82c743fdb 100644 --- a/pkg/sqlite/setup_test.go +++ b/pkg/sqlite/setup_test.go @@ -1520,9 +1520,10 @@ func createGroups(ctx context.Context, mqb models.GroupReaderWriter, n int, o in // groups [ i ] and [ n + o - i - 1 ] should have similar names with only the Name!=NaMe part different name = getGroupStringValue(index, name) + aliases := getGroupEmptyString(i, "Aliases") group := models.Group{ Name: name, - Aliases: getGroupStringValue(i, "Aliases"), + Aliases: aliases, URLs: models.NewRelatedStrings([]string{ getGroupEmptyString(i, urlField), }), From ed458c79f86c86da6a6ab2df70be5e35b3dc7e90 Mon Sep 17 00:00:00 2001 From: Slick Daddy Date: Sat, 9 May 2026 01:42:03 +0300 Subject: [PATCH 5/6] fix --- pkg/sqlite/group_test.go | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/pkg/sqlite/group_test.go b/pkg/sqlite/group_test.go index acfdd063d..9eaecba50 100644 --- a/pkg/sqlite/group_test.go +++ b/pkg/sqlite/group_test.go @@ -328,6 +328,7 @@ func emptyGroup(idx int) models.Group { return models.Group{ ID: groupIDs[idx], Name: groupNames[idx], + Aliases: "", TagIDs: models.NewRelatedIDs([]int{}), ContainingGroups: models.NewRelatedGroupDescriptions([]models.GroupIDDescription{}), SubGroups: models.NewRelatedGroupDescriptions([]models.GroupIDDescription{}), @@ -452,8 +453,9 @@ func Test_groupQueryBuilder_UpdatePartial(t *testing.T) { }, }, models.Group{ - ID: groupIDs[groupIdxWithParent], - Name: groupNames[groupIdxWithParent], + ID: groupIDs[groupIdxWithParent], + Name: groupNames[groupIdxWithParent], + Aliases: getGroupEmptyString(groupIdxWithParent, "Aliases"), ContainingGroups: models.NewRelatedGroupDescriptions([]models.GroupIDDescription{ {GroupID: groupIDs[groupIdxWithChild]}, {GroupID: groupIDs[groupIdxWithScene], Description: containingGroupDescription}, @@ -473,8 +475,9 @@ func Test_groupQueryBuilder_UpdatePartial(t *testing.T) { }, }, models.Group{ - ID: groupIDs[groupIdxWithChild], - Name: groupNames[groupIdxWithChild], + ID: groupIDs[groupIdxWithChild], + Name: groupNames[groupIdxWithChild], + Aliases: getGroupEmptyString(groupIdxWithChild, "Aliases"), SubGroups: models.NewRelatedGroupDescriptions([]models.GroupIDDescription{ {GroupID: groupIDs[groupIdxWithParent]}, {GroupID: groupIDs[groupIdxWithScene], Description: subGroupDescription}, @@ -496,6 +499,7 @@ func Test_groupQueryBuilder_UpdatePartial(t *testing.T) { models.Group{ ID: groupIDs[groupIdxWithParent], Name: groupNames[groupIdxWithParent], + Aliases: getGroupEmptyString(groupIdxWithParent, "Aliases"), ContainingGroups: models.NewRelatedGroupDescriptions([]models.GroupIDDescription{}), }, false, @@ -514,6 +518,7 @@ func Test_groupQueryBuilder_UpdatePartial(t *testing.T) { models.Group{ ID: groupIDs[groupIdxWithChild], Name: groupNames[groupIdxWithChild], + Aliases: getGroupEmptyString(groupIdxWithChild, "Aliases"), SubGroups: models.NewRelatedGroupDescriptions([]models.GroupIDDescription{}), }, false, From 10cc82f42a7fcb6b25c69cd249ba90c3d0f66342 Mon Sep 17 00:00:00 2001 From: Slick Daddy Date: Sat, 9 May 2026 02:01:20 +0300 Subject: [PATCH 6/6] another one --- pkg/sqlite/group_test.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkg/sqlite/group_test.go b/pkg/sqlite/group_test.go index 9eaecba50..4af82bb1c 100644 --- a/pkg/sqlite/group_test.go +++ b/pkg/sqlite/group_test.go @@ -915,7 +915,7 @@ func TestGroupQueryAliases(t *testing.T) { verifyGroupQuery(t, filter, verifyFn) aliasesCriterion.Modifier = models.CriterionModifierIncludes - aliasesCriterion.Value = "oup_1_alia" + aliasesCriterion.Value = "oup_0001_A" verifyGroupQuery(t, filter, verifyFn) aliasesCriterion.Modifier = models.CriterionModifierExcludes @@ -923,7 +923,7 @@ func TestGroupQueryAliases(t *testing.T) { verifyGroupQuery(t, filter, verifyFn) aliasesCriterion.Modifier = models.CriterionModifierMatchesRegex - aliasesCriterion.Value = "group_.*1_aliases" + aliasesCriterion.Value = "group_.*1_Aliases" verifyGroupQuery(t, filter, verifyFn) aliasesCriterion.Modifier = models.CriterionModifierNotMatchesRegex