From ee70e6dbc377b7957fe85c173da580f033ee93a3 Mon Sep 17 00:00:00 2001 From: Aleksandr Nogikh Date: Tue, 11 Mar 2025 21:38:10 +0100 Subject: syz-cluster: display and filter by Cc list For each series, display the Cc'd email list and let users filter the patch series list by those addresses. --- syz-cluster/pkg/db/series_repo.go | 14 +++++++++++--- syz-cluster/pkg/db/series_repo_test.go | 16 +++++++++++++--- syz-cluster/pkg/db/session_repo_test.go | 2 +- 3 files changed, 25 insertions(+), 7 deletions(-) (limited to 'syz-cluster/pkg/db') diff --git a/syz-cluster/pkg/db/series_repo.go b/syz-cluster/pkg/db/series_repo.go index 018d32d8f..affe7f9cf 100644 --- a/syz-cluster/pkg/db/series_repo.go +++ b/syz-cluster/pkg/db/series_repo.go @@ -130,20 +130,28 @@ type SeriesWithSession struct { Session *Session } +type SeriesFilter struct { + Cc string +} + // ListLatest() returns the list of series ordered by the decreasing PublishedAt value. -func (repo *SeriesRepository) ListLatest(ctx context.Context, +func (repo *SeriesRepository) ListLatest(ctx context.Context, filter SeriesFilter, maxPublishedAt time.Time, limit int) ([]*SeriesWithSession, error) { ro := repo.client.ReadOnlyTransaction() defer ro.Close() stmt := spanner.Statement{ - SQL: "SELECT * FROM Series", + SQL: "SELECT * FROM Series WHERE 1=1", Params: map[string]interface{}{}, } if !maxPublishedAt.IsZero() { - stmt.SQL += " WHERE PublishedAt < @toTime" + stmt.SQL += " AND PublishedAt < @toTime" stmt.Params["toTime"] = maxPublishedAt } + if filter.Cc != "" { + stmt.SQL += " AND @cc IN UNNEST(Cc)" + stmt.Params["cc"] = filter.Cc + } stmt.SQL += " ORDER BY PublishedAt DESC" if limit > 0 { stmt.SQL += " LIMIT @limit" diff --git a/syz-cluster/pkg/db/series_repo_test.go b/syz-cluster/pkg/db/series_repo_test.go index c01049e5c..f9462dd90 100644 --- a/syz-cluster/pkg/db/series_repo_test.go +++ b/syz-cluster/pkg/db/series_repo_test.go @@ -58,16 +58,19 @@ func TestSeriesRepositoryList(t *testing.T) { ExtID: "series-3", Title: "Series 3", PublishedAt: time.Date(2020, time.January, 1, 3, 0, 0, 0, time.UTC), + Cc: []string{"a"}, }, { ExtID: "series-1", Title: "Series 1", PublishedAt: time.Date(2020, time.January, 1, 1, 0, 0, 0, time.UTC), + Cc: []string{"a", "b"}, }, { ExtID: "series-2", Title: "Series 2", PublishedAt: time.Date(2020, time.January, 1, 2, 0, 0, 0, time.UTC), + Cc: []string{"c"}, }, } { err := repo.Insert(ctx, series, func() ([]*Patch, error) { return nil, nil }) @@ -81,13 +84,13 @@ func TestSeriesRepositoryList(t *testing.T) { }) t.Run("all", func(t *testing.T) { - list, err := repo.ListLatest(ctx, time.Time{}, 0) + list, err := repo.ListLatest(ctx, SeriesFilter{}, time.Time{}, 0) assert.NoError(t, err) assert.Len(t, list, 3) }) t.Run("with_limit", func(t *testing.T) { - list, err := repo.ListLatest(ctx, time.Time{}, 2) + list, err := repo.ListLatest(ctx, SeriesFilter{}, time.Time{}, 2) assert.NoError(t, err) assert.Len(t, list, 2) assert.Equal(t, "Series 3", list[0].Series.Title) @@ -96,12 +99,19 @@ func TestSeriesRepositoryList(t *testing.T) { t.Run("with_from", func(t *testing.T) { // Skips the latest series. - list, err := repo.ListLatest(ctx, time.Date(2020, time.January, 1, 3, 0, 0, 0, time.UTC), 0) + list, err := repo.ListLatest(ctx, SeriesFilter{}, time.Date(2020, time.January, 1, 3, 0, 0, 0, time.UTC), 0) assert.NoError(t, err) assert.Len(t, list, 2) assert.Equal(t, "Series 2", list[0].Series.Title) assert.Equal(t, "Series 1", list[1].Series.Title) }) + + t.Run("filter_by_cc", func(t *testing.T) { + list, err := repo.ListLatest(ctx, + SeriesFilter{Cc: "a"}, time.Time{}, 0) + assert.NoError(t, err) + assert.Len(t, list, 2) + }) } func TestSeriesRepositoryUpdate(t *testing.T) { diff --git a/syz-cluster/pkg/db/session_repo_test.go b/syz-cluster/pkg/db/session_repo_test.go index 2a3b9bd69..c6f79f975 100644 --- a/syz-cluster/pkg/db/session_repo_test.go +++ b/syz-cluster/pkg/db/session_repo_test.go @@ -20,7 +20,7 @@ func TestSeriesInsertSession(t *testing.T) { assert.NoError(t, err) withSession := func(need int) { - list, err := seriesRepo.ListLatest(ctx, time.Time{}, 10) + list, err := seriesRepo.ListLatest(ctx, SeriesFilter{}, time.Time{}, 10) assert.NoError(t, err) var cnt int for _, item := range list { -- cgit mrf-deployment