Custom data type for time representation (#86)

Co-authored-by: o.tyurin <o.tyurin@corp.mail.ru>
This commit is contained in:
Zloy_Leshiy
2024-04-30 13:03:08 +03:00
committed by GitHub
parent b0e1210f34
commit e5867813ab
4 changed files with 39 additions and 6 deletions

31
core.go
View File

@@ -5,6 +5,7 @@ import (
"net/http"
"reflect"
"strconv"
"strings"
"testing"
"time"
)
@@ -162,3 +163,33 @@ func TimeFromString(t *testing.T, format, datetime string) time.Time {
}
return dt
}
const LayoutRequestDateDefault = "2006-01-02"
type RequestDate struct {
time.Time
layout string
}
func NewRequestDate(t time.Time, layout string) *RequestDate {
return &RequestDate{
Time: t,
layout: layout,
}
}
func (rd *RequestDate) UnmarshalJSON(b []byte) (err error) {
s := strings.Trim(string(b), `"`) // remove quotes
if s == "null" {
return
}
rd.Time, err = time.Parse(rd.layout, s)
return
}
func (rd *RequestDate) MarshalJSON() ([]byte, error) {
if rd.Time.IsZero() {
return nil, nil
}
return []byte(fmt.Sprintf(`"%s"`, rd.Time.Format(rd.layout))), nil
}

View File

@@ -3,7 +3,6 @@ package ozon
import (
"context"
"net/http"
"time"
core "github.com/diphantxm/ozon-api-client"
)
@@ -14,10 +13,10 @@ type Analytics struct {
type GetAnalyticsDataParams struct {
// Date from which the data will be in the report
DateFrom time.Time `json:"date_from"`
DateFrom *core.RequestDate `json:"date_from"`
// Date up to which the data will be in the report
DateTo time.Time `json:"date_to"`
DateTo *core.RequestDate `json:"date_to"`
// Items Enum: "unknownDimension" "sku" "spu" "day" "week" "month" "year" "category1" "category2" "category3" "category4" "brand" "modelID"
// Data grouping available to all sellers:

View File

@@ -4,6 +4,7 @@ import (
"context"
"net/http"
"testing"
"time"
core "github.com/diphantxm/ozon-api-client"
)
@@ -22,8 +23,8 @@ func TestGetAnalyticsData(t *testing.T) {
http.StatusOK,
map[string]string{"Client-Id": "my-client-id", "Api-Key": "my-api-key"},
&GetAnalyticsDataParams{
DateFrom: core.TimeFromString(t, "2006-01-02", "2020-09-01"),
DateTo: core.TimeFromString(t, "2006-01-02", "2021-10-15"),
DateFrom: core.NewRequestDate(time.Now().Add(time.Duration(30)*24*time.Hour), core.LayoutRequestDateDefault),
DateTo: core.NewRequestDate(time.Now(), core.LayoutRequestDateDefault),
Dimension: []GetAnalyticsDataDimension{SKUDimension, DayDimension},
Metrics: []GetAnalyticsDataFilterMetric{HistViewPDP},
Sort: []GetAnalyticsDataSort{

View File

@@ -1,6 +1,8 @@
package ozon
import "time"
import (
"time"
)
const (
testTimeout = 5 * time.Second