diff options
| author | Aleksandr Nogikh <nogikh@google.com> | 2025-04-07 17:01:33 +0200 |
|---|---|---|
| committer | Aleksandr Nogikh <nogikh@google.com> | 2025-04-08 10:15:40 +0000 |
| commit | b133e63a2fee6e55cec2811da78dd5b6aab6440f (patch) | |
| tree | 73b3ad6c3c8f7031bbfa5b8b3a82cf65fdf6ff30 /syz-cluster/pkg | |
| parent | b899e60d5c5004525d9a554d1d5074d062c3fb95 (diff) | |
syz-cluster: add pagination
Add simple Previous/Next navigation for the list of series.
For now, just rely on SQL's LIMIT/OFFSET functionality.
Diffstat (limited to 'syz-cluster/pkg')
| -rw-r--r-- | syz-cluster/pkg/db/series_repo.go | 14 | ||||
| -rw-r--r-- | syz-cluster/pkg/db/series_repo_test.go | 25 | ||||
| -rw-r--r-- | syz-cluster/pkg/db/session_repo_test.go | 2 |
3 files changed, 29 insertions, 12 deletions
diff --git a/syz-cluster/pkg/db/series_repo.go b/syz-cluster/pkg/db/series_repo.go index b21b82889..554a32b00 100644 --- a/syz-cluster/pkg/db/series_repo.go +++ b/syz-cluster/pkg/db/series_repo.go @@ -134,11 +134,13 @@ type SeriesWithSession struct { type SeriesFilter struct { Cc string Status SessionStatus + Limit int + Offset int } // ListLatest() returns the list of series ordered by the decreasing PublishedAt value. func (repo *SeriesRepository) ListLatest(ctx context.Context, filter SeriesFilter, - maxPublishedAt time.Time, limit int) ([]*SeriesWithSession, error) { + maxPublishedAt time.Time) ([]*SeriesWithSession, error) { ro := repo.client.ReadOnlyTransaction() defer ro.Close() @@ -171,10 +173,14 @@ func (repo *SeriesRepository) ListLatest(ctx context.Context, filter SeriesFilte } stmt.SQL += ")" } - stmt.SQL += " ORDER BY PublishedAt DESC" - if limit > 0 { + stmt.SQL += " ORDER BY PublishedAt DESC, ID" + if filter.Limit > 0 { stmt.SQL += " LIMIT @limit" - stmt.Params["limit"] = limit + stmt.Params["limit"] = filter.Limit + } + if filter.Offset > 0 { + stmt.SQL += " OFFSET @offset" + stmt.Params["offset"] = filter.Offset } iter := ro.Query(ctx, stmt) defer iter.Stop() diff --git a/syz-cluster/pkg/db/series_repo_test.go b/syz-cluster/pkg/db/series_repo_test.go index 222014113..694893514 100644 --- a/syz-cluster/pkg/db/series_repo_test.go +++ b/syz-cluster/pkg/db/series_repo_test.go @@ -84,22 +84,34 @@ func TestSeriesRepositoryList(t *testing.T) { }) t.Run("all", func(t *testing.T) { - list, err := repo.ListLatest(ctx, SeriesFilter{}, time.Time{}, 0) + list, err := repo.ListLatest(ctx, SeriesFilter{}, time.Time{}) assert.NoError(t, err) assert.Len(t, list, 3) }) t.Run("with_limit", func(t *testing.T) { - list, err := repo.ListLatest(ctx, SeriesFilter{}, time.Time{}, 2) + list, err := repo.ListLatest(ctx, SeriesFilter{ + Limit: 2, + }, time.Time{}) assert.NoError(t, err) assert.Len(t, list, 2) assert.Equal(t, "Series 3", list[0].Series.Title) assert.Equal(t, "Series 2", list[1].Series.Title) }) + t.Run("with_offset", func(t *testing.T) { + list, err := repo.ListLatest(ctx, SeriesFilter{ + Limit: 1, + Offset: 1, + }, time.Time{}) + assert.NoError(t, err) + assert.Len(t, list, 1) + assert.Equal(t, "Series 2", list[0].Series.Title) + }) + t.Run("with_from", func(t *testing.T) { // Skips the latest series. - list, err := repo.ListLatest(ctx, SeriesFilter{}, 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)) assert.NoError(t, err) assert.Len(t, list, 2) assert.Equal(t, "Series 2", list[0].Series.Title) @@ -107,8 +119,7 @@ func TestSeriesRepositoryList(t *testing.T) { }) t.Run("filter_by_cc", func(t *testing.T) { - list, err := repo.ListLatest(ctx, - SeriesFilter{Cc: "a"}, time.Time{}, 0) + list, err := repo.ListLatest(ctx, SeriesFilter{Cc: "a"}, time.Time{}) assert.NoError(t, err) assert.Len(t, list, 2) }) @@ -125,7 +136,7 @@ func TestSeriesRepositoryList(t *testing.T) { assert.NoError(t, err) t.Run("filter_status_waiting", func(t *testing.T) { - list, err := repo.ListLatest(ctx, SeriesFilter{Status: SessionStatusWaiting}, time.Time{}, 0) + list, err := repo.ListLatest(ctx, SeriesFilter{Status: SessionStatusWaiting}, time.Time{}) assert.NoError(t, err) assert.Len(t, list, 1) }) @@ -134,7 +145,7 @@ func TestSeriesRepositoryList(t *testing.T) { assert.NoError(t, err) t.Run("filter_status_in_progress", func(t *testing.T) { - list, err := repo.ListLatest(ctx, SeriesFilter{Status: SessionStatusInProgress}, time.Time{}, 0) + list, err := repo.ListLatest(ctx, SeriesFilter{Status: SessionStatusInProgress}, time.Time{}) assert.NoError(t, err) assert.Len(t, list, 1) }) diff --git a/syz-cluster/pkg/db/session_repo_test.go b/syz-cluster/pkg/db/session_repo_test.go index c6f79f975..eb688510a 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, SeriesFilter{}, time.Time{}, 10) + list, err := seriesRepo.ListLatest(ctx, SeriesFilter{Limit: 10}, time.Time{}) assert.NoError(t, err) var cnt int for _, item := range list { |
