diff --git a/pkg/items/pagination.go b/pkg/items/pagination.go index 0c07c415ccfd2ad2d005c2c02fae92ad8e01036d..de9354a35b654d1d63fc69b2b3239b4d16aa5186 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 d1e7960895bb6239c89c15b4b82968bf33974ae5..6de164acfab0f91ac1f81b67c5ec0b0f877b557d 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,