From 3b940253b4fd551714672c5b7fc04737691096df Mon Sep 17 00:00:00 2001 From: Danis Kirasirov <dbgbbu@gmail.com> Date: Tue, 13 Feb 2024 17:33:32 +0300 Subject: [PATCH] =?UTF-8?q?=D0=98=D1=81=D0=BF=D0=BE=D0=BB=D1=8C=D0=B7?= =?UTF-8?q?=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D0=B5=20offset/limit=20=D0=B2=20?= =?UTF-8?q?items.BatchProcessor?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/items/pagination.go | 30 +++++++++++++++--------------- pkg/options/options.go | 10 ++++++++-- 2 files changed, 23 insertions(+), 17 deletions(-) diff --git a/pkg/items/pagination.go b/pkg/items/pagination.go index 0c07c415..de9354a3 100644 --- a/pkg/items/pagination.go +++ b/pkg/items/pagination.go @@ -16,9 +16,7 @@ type BatchProcessor struct { FindPublishedOptions *FindPublishedOptions Filter *Filter - // Deprecated использовать offset, limit - pageSize, pageNum int - + limit int sort []string processed int } @@ -39,7 +37,7 @@ func (b *BatchProcessor) getBatch(ctx context.Context) ([]*Item, bool, error) { Regular: b.FindPublishedOptions.Regular, Hidden: b.FindPublishedOptions.Hidden, Templates: b.FindPublishedOptions.Templates, - FindOptions: *options.NewFindOptions(b.pageNum, b.pageSize, b.sort...), + FindOptions: *options.GetFindOptions(b.processed, b.limit, b.sort...), }, ) } else { @@ -54,14 +52,13 @@ func (b *BatchProcessor) getBatch(ctx context.Context) ([]*Item, bool, error) { Regular: b.FindOptions.Regular, Hidden: b.FindOptions.Hidden, Templates: b.FindOptions.Templates, - FindOptions: *options.NewFindOptions(b.pageNum, b.pageSize, b.sort...), + FindOptions: *options.GetFindOptions(b.processed, b.limit, b.sort...), }, ) } if err == nil { b.processed += len(res) - b.pageNum++ } return res, b.processed != total, err @@ -86,32 +83,35 @@ func (b *BatchProcessor) next(ctx context.Context) (res []*Item, next bool, err } func (b *BatchProcessor) reducePageSize() bool { - if b.pageSize == 1 { + if b.limit == 1 { return false } - b.pageNum = 2 * b.pageNum - b.pageSize = b.pageSize / 2 - + b.limit /= 2 return true } func (b *BatchProcessor) Do(ctx context.Context, f func(batch []*Item) error) (int, error) { - if b.FindOptions == nil && b.FindPublishedOptions == nil { b.FindOptions = new(FindOptions) } if b.FindOptions != nil { - b.pageSize = b.FindOptions.PageSize + b.limit = b.FindOptions.PageSize b.sort = b.FindOptions.Sort + if b.FindOptions.Limit != 0 { + b.limit = b.FindOptions.Limit + } } if b.FindPublishedOptions != nil { - b.pageSize = b.FindPublishedOptions.PageSize + b.limit = b.FindPublishedOptions.PageSize b.sort = b.FindPublishedOptions.Sort + if b.FindPublishedOptions.Limit != 0 { + b.limit = b.FindPublishedOptions.Limit + } } - if b.pageSize == 0 { - b.pageSize = 128 + if b.limit == 0 { + b.limit = 128 } if b.Filter != nil && (len(b.Filter.ID) > 0 || len(b.Filter.Q) > 0) && !data.Contains("_id", b.sort) { diff --git a/pkg/options/options.go b/pkg/options/options.go index d1e79608..6de164ac 100644 --- a/pkg/options/options.go +++ b/pkg/options/options.go @@ -39,12 +39,18 @@ type FindOptions struct { FieldOptions } +// Deprecated использовать GetFindOptions // NewFindOptions создает новые результаты поиска func NewFindOptions(pageNum, pageSize int, sort ...string) *FindOptions { + return GetFindOptions(pageNum*pageSize, pageSize, sort...) +} + +// GetFindOptions создает новые параметры поиска +func GetFindOptions(offset, limit int, sort ...string) *FindOptions { return &FindOptions{ PaginationOptions: PaginationOptions{ - PageNum: pageNum, - PageSize: pageSize, + Offset: offset, + Limit: limit, }, SortOptions: SortOptions{ Sort: sort, -- GitLab