From 390c429480b80b463663260e0e714c4e897f17e1 Mon Sep 17 00:00:00 2001 From: ko_oler <kooler89@gmail.com> Date: Mon, 12 Feb 2024 16:23:30 +0300 Subject: [PATCH] =?UTF-8?q?=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D1=8B=20=D0=BC=D0=B5=D1=82=D0=BE=D0=B4=D1=8B=20FindOptio?= =?UTF-8?q?nsFromPB=20=D0=B8=20FindOptionsToPB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/options/options.go | 56 +++++++++++++++++++++++++++++++++++++++++- 1 file changed, 55 insertions(+), 1 deletion(-) diff --git a/pkg/options/options.go b/pkg/options/options.go index 09296f35..066d3f8a 100644 --- a/pkg/options/options.go +++ b/pkg/options/options.go @@ -1,6 +1,10 @@ package options -import "time" +import ( + "time" + + commonpb "git.perx.ru/perxis/perxis-go/proto/common" +) // SortOptions настройки сортировки результатов type SortOptions struct { @@ -82,6 +86,56 @@ func MergeFindOptions(opts ...interface{}) *FindOptions { return fo } +func FindOptionsFromPB(protoOpts *commonpb.FindOptions) *FindOptions { + if protoOpts == nil { + return nil + } + fo := &FindOptions{ + SortOptions: SortOptions{ + Sort: protoOpts.Sort, + }, + PaginationOptions: PaginationOptions{ + Offset: int(protoOpts.Offset), + Limit: int(protoOpts.Limit), + }, + FieldOptions: FieldOptions{ + Fields: protoOpts.Fields, + ExcludeFields: protoOpts.ExcludeFields, + }, + } + + if fo.Offset == 0 && fo.Limit == 0 && fo.PageSize != 0 { + fo.Offset = fo.PageSize * (fo.PageNum - 1) + fo.Limit = fo.PageSize + } + + return fo +} + +func FindOptionsToPB(opts *FindOptions) *commonpb.FindOptions { + if opts == nil { + return nil + } + 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 - 1) + } + if fo.Limit != 0 && fo.PageSize == 0 { + fo.PageSize = fo.Limit + fo.PageNum = fo.Offset / fo.Limit + } + return fo +} + type TimeFilter struct { Before, After time.Time } -- GitLab