From 7b630eb783e8fde62df1e0a684185ba4fbd510bf Mon Sep 17 00:00:00 2001
From: Danis Kirasirov <dbgbbu@gmail.com>
Date: Mon, 19 Feb 2024 13:11:46 +0300
Subject: [PATCH] =?UTF-8?q?=D0=A3=D0=B4=D0=B0=D0=BB=D0=B5=D0=BD=D1=8B=20?=
 =?UTF-8?q?=D0=BF=D0=BE=D0=BB=D1=8F=20PageNum/PageSize?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../grpc/protobuf_type_converters.microgen.go | 19 +++++++++-----
 pkg/items/dummy.go                            | 12 ++-------
 pkg/items/pagination.go                       | 10 ++-----
 pkg/options/options.go                        | 26 +++----------------
 pkg/options/options_test.go                   | 26 -------------------
 5 files changed, 21 insertions(+), 72 deletions(-)

diff --git a/pkg/invitations/transport/grpc/protobuf_type_converters.microgen.go b/pkg/invitations/transport/grpc/protobuf_type_converters.microgen.go
index ee7b788e..1b222519 100644
--- a/pkg/invitations/transport/grpc/protobuf_type_converters.microgen.go
+++ b/pkg/invitations/transport/grpc/protobuf_type_converters.microgen.go
@@ -104,11 +104,18 @@ func PtrServicesFindOptionsToProto(opts *options.FindOptions) (*pb.FindOptions,
 	if opts == nil {
 		return nil, nil
 	}
-	return &pb.FindOptions{
+
+	fo := &pb.FindOptions{
 		Sort:     opts.Sort,
-		PageNum:  int32(opts.PageNum),
-		PageSize: int32(opts.PageSize),
-	}, nil
+		PageSize: int32(opts.Limit),
+	}
+
+	if opts.Limit != 0 {
+		// Потенциальная ошибка если offset не кратен limit
+		fo.PageNum = int32(opts.Offset / opts.Limit)
+	}
+
+	return fo, nil
 }
 
 func ProtoToPtrServicesFindOptions(protoOpts *pb.FindOptions) (*options.FindOptions, error) {
@@ -120,8 +127,8 @@ func ProtoToPtrServicesFindOptions(protoOpts *pb.FindOptions) (*options.FindOpti
 			Sort: protoOpts.Sort,
 		},
 		PaginationOptions: options.PaginationOptions{
-			PageNum:  int(protoOpts.PageNum),
-			PageSize: int(protoOpts.PageSize),
+			Limit:	int(protoOpts.PageSize),
+			Offset: int(protoOpts.PageNum * protoOpts.PageSize),
 		},
 	}, nil
 }
diff --git a/pkg/items/dummy.go b/pkg/items/dummy.go
index a31b47c7..29b2f593 100644
--- a/pkg/items/dummy.go
+++ b/pkg/items/dummy.go
@@ -25,18 +25,10 @@ type DummyWithOptions struct {
 
 func (d *DummyWithOptions) Find(_ context.Context, _, _, _ string, _ *Filter, opts ...*FindOptions) ([]*Item, int, error) {
 	fo := MergeFindOptions(opts...)
-	limit := fo.Limit
-	if limit == 0 {
-		limit = fo.PageSize
-	}
-	return make([]*Item, limit), d.Total, nil
+	return make([]*Item, fo.Limit), d.Total, nil
 }
 
 func (d *DummyWithOptions) FindPublished(_ context.Context, _, _, _ string, _ *Filter, opts ...*FindPublishedOptions) ([]*Item, int, error) {
 	fo := MergeFindPublishedOptions(opts...)
-	limit := fo.Limit
-	if limit == 0 {
-		limit = fo.PageSize
-	}
-	return make([]*Item, limit), d.Total, nil
+	return make([]*Item, fo.Limit), d.Total, nil
 }
diff --git a/pkg/items/pagination.go b/pkg/items/pagination.go
index f9461079..c8c4bb16 100644
--- a/pkg/items/pagination.go
+++ b/pkg/items/pagination.go
@@ -96,18 +96,12 @@ func (b *BatchProcessor) Do(ctx context.Context, f func(batch []*Item) error) (i
 		b.FindOptions = new(FindOptions)
 	}
 	if b.FindOptions != nil {
-		b.limit = b.FindOptions.PageSize
+		b.limit = b.FindOptions.Limit
 		b.sort = b.FindOptions.Sort
-		if b.FindOptions.Limit != 0 {
-			b.limit = b.FindOptions.Limit
-		}
 	}
 	if b.FindPublishedOptions != nil {
-		b.limit = b.FindPublishedOptions.PageSize
+		b.limit = b.FindPublishedOptions.Limit
 		b.sort = b.FindPublishedOptions.Sort
-		if b.FindPublishedOptions.Limit != 0 {
-			b.limit = b.FindPublishedOptions.Limit
-		}
 	}
 
 	if b.limit == 0 {
diff --git a/pkg/options/options.go b/pkg/options/options.go
index cb0bd504..d18ca338 100644
--- a/pkg/options/options.go
+++ b/pkg/options/options.go
@@ -13,10 +13,6 @@ type SortOptions struct {
 
 // PaginationOptions настройки возвращаемых страниц результатов
 type PaginationOptions struct {
-	//Deprecated
-	PageNum  int
-	PageSize int
-
 	Limit  int
 	Offset int
 }
@@ -101,8 +97,6 @@ func FindOptionsFromPB(protoOpts *commonpb.FindOptions) *FindOptions {
 			Sort: protoOpts.Sort,
 		},
 		PaginationOptions: PaginationOptions{
-			PageNum:  int(protoOpts.PageNum),
-			PageSize: int(protoOpts.PageSize),
 			Limit:    int(protoOpts.Limit),
 			Offset:   int(protoOpts.Offset),
 		},
@@ -112,9 +106,9 @@ func FindOptionsFromPB(protoOpts *commonpb.FindOptions) *FindOptions {
 		},
 	}
 
-	if fo.Offset == 0 && fo.Limit == 0 && fo.PageSize != 0 {
-		fo.Offset = fo.PageSize * fo.PageNum
-		fo.Limit = fo.PageSize
+	if fo.Offset == 0 && fo.Limit == 0 {
+		fo.Offset = int(protoOpts.PageSize * protoOpts.PageNum)
+		fo.Limit = int(protoOpts.PageSize)
 	}
 
 	return fo
@@ -126,21 +120,11 @@ func FindOptionsToPB(opts *FindOptions) *commonpb.FindOptions {
 	}
 	fo := &commonpb.FindOptions{
 		Sort:          opts.Sort,
-		PageNum:       int32(opts.PageNum),
-		PageSize:      int32(opts.PageSize),
 		Offset:        int32(opts.Offset),
 		Limit:         int32(opts.Limit),
 		Fields:        opts.Fields,
 		ExcludeFields: opts.ExcludeFields,
 	}
-	if fo.PageSize != 0 && fo.Limit == 0 {
-		fo.Limit = fo.PageSize
-		fo.Offset = fo.PageSize * fo.PageNum
-	}
-	if fo.Limit != 0 && fo.PageSize == 0 {
-		fo.PageSize = fo.Limit
-		fo.PageNum = fo.Offset / fo.Limit
-	}
 	return fo
 }
 
@@ -164,11 +148,9 @@ func MergeSortOptions(options ...SortOptions) SortOptions {
 func MergePaginationOptions(options ...PaginationOptions) PaginationOptions {
 	fo := PaginationOptions{}
 	for _, opt := range options {
-		if opt.PageSize == 0 && opt.PageNum == 0 && opt.Offset == 0 && opt.Limit == 0 {
+		if opt.Offset == 0 && opt.Limit == 0 {
 			continue
 		}
-		fo.PageNum = opt.PageNum
-		fo.PageSize = opt.PageSize
 		fo.Offset = opt.Offset
 		fo.Limit = opt.Limit
 	}
diff --git a/pkg/options/options_test.go b/pkg/options/options_test.go
index da9e71dd..d2227a87 100644
--- a/pkg/options/options_test.go
+++ b/pkg/options/options_test.go
@@ -22,32 +22,6 @@ func TestOptions_MergePaginationOptions(t *testing.T) {
 			options:  []PaginationOptions{},
 			expected: PaginationOptions{},
 		},
-		{
-			name:     "One page option",
-			options:  []PaginationOptions{{PageNum: 10, PageSize: 100}},
-			expected: PaginationOptions{PageNum: 10, PageSize: 100},
-		},
-		{
-			name:     "Merge pages #1",
-			options:  []PaginationOptions{{PageNum: 0, PageSize: 0}, {PageNum: 10, PageSize: 100}},
-			expected: PaginationOptions{PageNum: 10, PageSize: 100},
-		},
-		{
-			name:     "Merge pages #2",
-			options:  []PaginationOptions{{PageNum: 10, PageSize: 100}, {PageNum: 0, PageSize: 0}},
-			expected: PaginationOptions{PageNum: 10, PageSize: 100},
-		},
-		{
-			name:     "Merge pages #3",
-			options:  []PaginationOptions{{PageNum: 0, PageSize: 0}, {PageNum: 10, PageSize: 100}, {PageNum: 0, PageSize: 0}},
-			expected: PaginationOptions{PageNum: 10, PageSize: 100},
-		},
-		{
-			name:     "Merge pages #4",
-			options:  []PaginationOptions{{PageNum: 10, PageSize: 100}, {}},
-			expected: PaginationOptions{PageNum: 10, PageSize: 100},
-		},
-
 		{
 			name:     "One limit/offset option",
 			options:  []PaginationOptions{{Limit: 10, Offset: 100}},
-- 
GitLab