Custom data type for time representation (#86)
Co-authored-by: o.tyurin <o.tyurin@corp.mail.ru>
This commit is contained in:
31
core.go
31
core.go
@@ -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
|
||||
}
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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{
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
package ozon
|
||||
|
||||
import "time"
|
||||
import (
|
||||
"time"
|
||||
)
|
||||
|
||||
const (
|
||||
testTimeout = 5 * time.Second
|
||||
|
||||
Reference in New Issue
Block a user