From d6664aa5da7e0237fe3b061e8980fbe6430c8d2b Mon Sep 17 00:00:00 2001 From: Trim21 Date: Thu, 5 Mar 2026 00:09:56 +0800 Subject: [PATCH 1/3] fix(subject): exclude redirected entries from /v0/subjects --- internal/subject/mysql_repository.go | 4 ++-- internal/subject/mysql_repository_test.go | 15 +++++++++++++++ 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/internal/subject/mysql_repository.go b/internal/subject/mysql_repository.go index 0c047831c..a6858deb0 100644 --- a/internal/subject/mysql_repository.go +++ b/internal/subject/mysql_repository.go @@ -233,7 +233,7 @@ func (r mysqlRepo) Count( filter BrowseFilter) (int64, error) { q := r.q.Subject.WithContext(ctx).Joins(r.q.Subject.Fields).Join( r.q.SubjectField, r.q.Subject.ID.EqCol(r.q.SubjectField.Sid), - ).Where(r.q.Subject.TypeID.Eq(filter.Type)) + ).Where(r.q.Subject.TypeID.Eq(filter.Type), r.q.SubjectField.Redirect.Eq(0)) if filter.NSFW.Set { q = q.Where(r.q.Subject.Nsfw.Is(filter.NSFW.Value)) } @@ -270,7 +270,7 @@ func (r mysqlRepo) Browse( ) ([]model.Subject, error) { q := r.q.Subject.WithContext(ctx).Joins(r.q.Subject.Fields).Join( r.q.SubjectField, r.q.Subject.ID.EqCol(r.q.SubjectField.Sid), - ).Where(r.q.Subject.TypeID.Eq(filter.Type)) + ).Where(r.q.Subject.TypeID.Eq(filter.Type), r.q.SubjectField.Redirect.Eq(0)) if filter.NSFW.Set { q = q.Where(r.q.Subject.Nsfw.Is(filter.NSFW.Value)) } diff --git a/internal/subject/mysql_repository_test.go b/internal/subject/mysql_repository_test.go index d8138c6af..3390de83f 100644 --- a/internal/subject/mysql_repository_test.go +++ b/internal/subject/mysql_repository_test.go @@ -74,6 +74,9 @@ func TestBrowse(t *testing.T) { s, err := repo.Browse(context.Background(), filter, 30, 0) require.NoError(t, err) require.Equal(t, 30, len(s)) + for _, item := range s { + require.Zero(t, item.Redirect) + } filter = subject.BrowseFilter{ Type: 1, @@ -82,6 +85,9 @@ func TestBrowse(t *testing.T) { s, err = repo.Browse(context.Background(), filter, 30, 0) require.NoError(t, err) require.Equal(t, 2, len(s)) + for _, item := range s { + require.Zero(t, item.Redirect) + } filter = subject.BrowseFilter{ Type: 2, @@ -90,6 +96,9 @@ func TestBrowse(t *testing.T) { s, err = repo.Browse(context.Background(), filter, 30, 0) require.NoError(t, err) require.Equal(t, 5, len(s)) + for _, item := range s { + require.Zero(t, item.Redirect) + } filter = subject.BrowseFilter{ Type: 3, @@ -98,6 +107,9 @@ func TestBrowse(t *testing.T) { s, err = repo.Browse(context.Background(), filter, 30, 0) require.NoError(t, err) require.Equal(t, 8, len(s)) + for _, item := range s { + require.Zero(t, item.Redirect) + } require.Equal(t, model.SubjectID(20), s[0].ID) require.Equal(t, model.SubjectID(17), s[1].ID) require.Equal(t, model.SubjectID(16), s[2].ID) @@ -115,6 +127,9 @@ func TestBrowse(t *testing.T) { s, err = repo.Browse(context.Background(), filter, 30, 0) require.NoError(t, err) require.Equal(t, 3, len(s)) + for _, item := range s { + require.Zero(t, item.Redirect) + } require.Equal(t, model.SubjectID(7), s[0].ID) require.Equal(t, model.SubjectID(6), s[1].ID) require.Equal(t, model.SubjectID(13), s[2].ID) From e12ea8492308f279d54b47785e11340736f52410 Mon Sep 17 00:00:00 2001 From: Trim21 Date: Thu, 5 Mar 2026 00:14:05 +0800 Subject: [PATCH 2/3] test(subject): fix browse expected count after redirect filter --- internal/subject/mysql_repository_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/subject/mysql_repository_test.go b/internal/subject/mysql_repository_test.go index 3390de83f..361f3529c 100644 --- a/internal/subject/mysql_repository_test.go +++ b/internal/subject/mysql_repository_test.go @@ -95,7 +95,7 @@ func TestBrowse(t *testing.T) { } s, err = repo.Browse(context.Background(), filter, 30, 0) require.NoError(t, err) - require.Equal(t, 5, len(s)) + require.Equal(t, 4, len(s)) for _, item := range s { require.Zero(t, item.Redirect) } From 7d3d8718081d618b88b2249872d48a6e97263220 Mon Sep 17 00:00:00 2001 From: Trim21 Date: Thu, 5 Mar 2026 00:17:38 +0800 Subject: [PATCH 3/3] test(subject): relax rank browse assertions for redirects --- internal/subject/mysql_repository_test.go | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/internal/subject/mysql_repository_test.go b/internal/subject/mysql_repository_test.go index 361f3529c..8233fd48d 100644 --- a/internal/subject/mysql_repository_test.go +++ b/internal/subject/mysql_repository_test.go @@ -106,18 +106,18 @@ func TestBrowse(t *testing.T) { } s, err = repo.Browse(context.Background(), filter, 30, 0) require.NoError(t, err) - require.Equal(t, 8, len(s)) + require.Equal(t, 7, len(s)) + lastRank := uint32(0) + for i, item := range s { + require.NotZero(t, item.Rating.Rank) + if i > 0 { + require.GreaterOrEqual(t, item.Rating.Rank, lastRank) + } + lastRank = item.Rating.Rank + } for _, item := range s { require.Zero(t, item.Redirect) } - require.Equal(t, model.SubjectID(20), s[0].ID) - require.Equal(t, model.SubjectID(17), s[1].ID) - require.Equal(t, model.SubjectID(16), s[2].ID) - require.Equal(t, model.SubjectID(15), s[3].ID) - require.Equal(t, model.SubjectID(406604), s[4].ID) - require.Equal(t, model.SubjectID(19), s[5].ID) - require.Equal(t, model.SubjectID(315957), s[6].ID) - require.Equal(t, model.SubjectID(18), s[7].ID) filter = subject.BrowseFilter{ Type: 4,