From acedcab5ada6487d8eee90e2b7f0b46905c402be Mon Sep 17 00:00:00 2001
From: ko_oler <kooler89@gmail.com>
Date: Tue, 26 Nov 2024 13:51:05 +0300
Subject: [PATCH] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB?=
 =?UTF-8?q?=D0=B5=D0=BD=D0=B0=20=D0=B7=D0=B0=D0=BF=D0=B8=D1=81=D1=8C=20'Fr?=
 =?UTF-8?q?om'=20=D0=B8=20'To'=20=D0=BF=D1=80=D0=B8=20=D0=BA=D0=BE=D0=BD?=
 =?UTF-8?q?=D0=B2=D0=B5=D1=80=D1=82=D0=B0=D1=86=D0=B8=D0=B8=20=D0=B8=D0=B7?=
 =?UTF-8?q?=20go-=D0=BF=D1=80=D0=B5=D0=B4=D1=81=D1=82=D0=B0=D0=B2=D0=BB?=
 =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D1=8F=20=D0=B2=20PB=20=D0=B8=20=D0=BE=D0=B1?=
 =?UTF-8?q?=D1=80=D0=B0=D1=82=D0=BD=D0=BE=20=D0=B2=20=D1=81=D0=B5=D1=80?=
 =?UTF-8?q?=D0=B2=D0=B8=D1=81=D0=B5=20"=D0=9B=D0=BE=D0=B3"?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 logs/log_test.go | 21 ++++++++++++++++++++
 logs/service.go  | 51 +++++++++++++++++++++++++++++++-----------------
 2 files changed, 54 insertions(+), 18 deletions(-)

diff --git a/logs/log_test.go b/logs/log_test.go
index 1816cb9f..6cf49420 100644
--- a/logs/log_test.go
+++ b/logs/log_test.go
@@ -5,6 +5,7 @@ import (
 	"time"
 
 	"git.perx.ru/perxis/perxis-go/id"
+	pb "git.perx.ru/perxis/perxis-go/proto/logs"
 	"github.com/stretchr/testify/assert"
 )
 
@@ -64,3 +65,23 @@ func TestEntry_ToMap(t *testing.T) {
 		})
 	}
 }
+
+func TestFindRequest(t *testing.T) {
+	t.Run("From PB", func(t *testing.T) {
+		res := FindRequestFromPB(&pb.FindRequest{
+			Filter:  nil,
+			Options: &pb.FindOptions{},
+		})
+		assert.True(t, res.Options.From.IsZero())
+		assert.True(t, res.Options.To.IsZero())
+	})
+	t.Run("To PB", func(t *testing.T) {
+		res := FindRequestToPB(&FindRequest{
+			Filter:  nil,
+			Options: &FindOptions{},
+		})
+		assert.False(t, res.Options.From.IsValid())
+		assert.False(t, res.Options.To.IsValid())
+	})
+
+}
diff --git a/logs/service.go b/logs/service.go
index fe92b160..97400904 100644
--- a/logs/service.go
+++ b/logs/service.go
@@ -155,31 +155,46 @@ func FindRequestFromPB(request *pb.FindRequest) *FindRequest {
 }
 
 // FindOptionsToPB перевод в proto представление FindOptions
-func FindOptionsToPB(result *FindOptions) *pb.FindOptions {
-	if result == nil {
+func FindOptionsToPB(opts *FindOptions) *pb.FindOptions {
+	if opts == nil {
 		return nil
 	}
-	return &pb.FindOptions{
-		Sort:          result.Sort,
-		Fields:        result.Fields,
-		ExcludeFields: result.ExcludeFields,
-		Limit:         int32(result.Limit),
-		From:          timestamppb.New(result.From),
-		To:            timestamppb.New(result.To),
+
+	res := &pb.FindOptions{
+		Sort:          opts.Sort,
+		Fields:        opts.Fields,
+		ExcludeFields: opts.ExcludeFields,
+		Limit:         int32(opts.Limit),
+	}
+
+	if !opts.From.IsZero() {
+		res.From = timestamppb.New(opts.From)
+	}
+
+	if !opts.To.IsZero() {
+		res.To = timestamppb.New(opts.To)
 	}
+
+	return res
 }
 
 // FindOptionsFromPB перевод из proto представления FindOptions
-func FindOptionsFromPB(result *pb.FindOptions) *FindOptions {
-	if result == nil {
+func FindOptionsFromPB(opts *pb.FindOptions) *FindOptions {
+	if opts == nil {
 		return nil
 	}
-	return &FindOptions{
-		Sort:          result.Sort,
-		Fields:        result.Fields,
-		ExcludeFields: result.ExcludeFields,
-		Limit:         int(result.Limit),
-		From:          result.From.AsTime(),
-		To:            result.To.AsTime(),
+	res := &FindOptions{
+		Sort:          opts.Sort,
+		Fields:        opts.Fields,
+		ExcludeFields: opts.ExcludeFields,
+		Limit:         int(opts.Limit),
+	}
+
+	if opts.From.IsValid() {
+		res.From = opts.From.AsTime()
+	}
+	if opts.To.IsValid() {
+		res.To = opts.To.AsTime()
 	}
+	return res
 }
-- 
GitLab