fix/change string to time.Time where possible

This commit is contained in:
diPhantxm
2023-03-12 23:11:00 +03:00
parent ca40ab4559
commit c9a0f83145
5 changed files with 165 additions and 174 deletions

View File

@@ -82,9 +82,9 @@ func (c Client) Request(method string, path string, req, resp interface{}) (*Res
response.Data = resp response.Data = resp
response.StatusCode = httpResp.StatusCode response.StatusCode = httpResp.StatusCode
if httpResp.StatusCode == http.StatusOK { if httpResp.StatusCode == http.StatusOK {
err = json.Unmarshal(body, &response)
} else {
err = json.Unmarshal(body, &response.Data) err = json.Unmarshal(body, &response.Data)
} else {
err = json.Unmarshal(body, &response)
} }
if err != nil { if err != nil {
return nil, err return nil, err

10
core.go
View File

@@ -4,6 +4,8 @@ import (
"fmt" "fmt"
"net/http" "net/http"
"reflect" "reflect"
"testing"
"time"
) )
type CommonResponse struct { type CommonResponse struct {
@@ -99,3 +101,11 @@ func isZero(v interface{}) (bool, error) {
} }
return v == reflect.Zero(t).Interface(), nil return v == reflect.Zero(t).Interface(), nil
} }
func TimeFromString(t *testing.T, datetime string) time.Time {
dt, err := time.Parse("2006-01-02T15:04:05Z", datetime)
if err != nil {
t.Errorf("error when parsing time: %s", err)
}
return dt
}

View File

@@ -2,6 +2,7 @@ package ozon
import ( import (
"net/http" "net/http"
"time"
core "github.com/diphantxm/ozon-api-client" core "github.com/diphantxm/ozon-api-client"
) )
@@ -15,10 +16,10 @@ type ListUnprocessedShipmentsParams struct {
} }
type ListUnprocessedShipmentsFilter struct { type ListUnprocessedShipmentsFilter struct {
CutoffFrom string `json:"cutoff_from"` CutoffFrom time.Time `json:"cutoff_from"`
CutoffTo string `json:"cutoff_to"` CutoffTo time.Time `json:"cutoff_to"`
DeliveringDateFrom string `json:"delivering_date_from"` DeliveringDateFrom time.Time `json:"delivering_date_from"`
DeliveringDateTo string `json:"delivering_date_to"` DeliveringDateTo time.Time `json:"delivering_date_to"`
DeliveryMethodId []int64 `json:"deliveryMethodId"` DeliveryMethodId []int64 `json:"deliveryMethodId"`
ProviderId []int64 `json:"provider_id"` ProviderId []int64 `json:"provider_id"`
Status string `json:"status"` Status string `json:"status"`
@@ -51,8 +52,8 @@ type ListUnprocessedShipmentsPosting struct {
AnalyticsData struct { AnalyticsData struct {
City string `json:"city"` City string `json:"city"`
DeliveryDateBegin string `json:"delivery_date_begin"` DeliveryDateBegin time.Time `json:"delivery_date_begin"`
DeliveryDateEnd string `json:"delivery_date_end"` DeliveryDateEnd time.Time `json:"delivery_date_end"`
DeliveryType string `json:"delivery_type"` DeliveryType string `json:"delivery_type"`
IsLegal bool `json:"is_legal"` IsLegal bool `json:"is_legal"`
IsPremium bool `json:"is_premium"` IsPremium bool `json:"is_premium"`
@@ -85,7 +86,7 @@ type ListUnprocessedShipmentsPosting struct {
Comment string `json:"comment"` Comment string `json:"comment"`
Country string `json:"country"` Country string `json:"country"`
District string `json:"district"` District string `json:"district"`
Latitude float64 `json:'latitude"` Latitude float64 `json:"latitude"`
Longitude float64 `json:"longitude"` Longitude float64 `json:"longitude"`
ProviderPVZCode string `json:"provider_pvz_code"` ProviderPVZCode string `json:"provider_pvz_code"`
PVZCode int64 `json:"pvz_code"` PVZCode int64 `json:"pvz_code"`
@@ -99,7 +100,8 @@ type ListUnprocessedShipmentsPosting struct {
Phone string `json:"phone"` Phone string `json:"phone"`
} `json:"customer"` } `json:"customer"`
DeliveringDate string `json:"delivering_date"` DeliveringDate time.Time `json:"delivering_date"`
DeliveryMethod struct { DeliveryMethod struct {
Id int64 `json:"id"` Id int64 `json:"id"`
Name string `json:"name"` Name string `json:"name"`
@@ -126,7 +128,7 @@ type ListUnprocessedShipmentsPosting struct {
Payout float64 `json:"payout"` Payout float64 `json:"payout"`
Picking struct { Picking struct {
Amount float64 `json:"amount"` Amount float64 `json:"amount"`
Moment string `json:"moment"` Moment time.Time `json:"moment"`
Tag string `json:"tag"` Tag string `json:"tag"`
} `json:"picking"` } `json:"picking"`
Price float64 `json:"price"` Price float64 `json:"price"`
@@ -137,7 +139,7 @@ type ListUnprocessedShipmentsPosting struct {
} `json:"products"` } `json:"products"`
} }
InProccessAt string `json:"in_process_at"` InProccessAt time.Time `json:"in_process_at"`
IsExpress bool `json:"is_express"` IsExpress bool `json:"is_express"`
IsMultibox bool `json:"is_multibox"` IsMultibox bool `json:"is_multibox"`
MultiBoxQuantity int32 `json:"multi_box_qty"` MultiBoxQuantity int32 `json:"multi_box_qty"`
@@ -146,7 +148,7 @@ type ListUnprocessedShipmentsPosting struct {
ParentPostingNumber string `json:"parent_posting_number"` ParentPostingNumber string `json:"parent_posting_number"`
PostingNumber string `json:"posting_number"` PostingNumber string `json:"posting_number"`
Products struct { Products []struct {
MandatoryMark []string `json:"mandatory_mark"` MandatoryMark []string `json:"mandatory_mark"`
Name string `json:"name"` Name string `json:"name"`
OfferId string `json:"offer_id"` OfferId string `json:"offer_id"`
@@ -163,7 +165,7 @@ type ListUnprocessedShipmentsPosting struct {
ProductsRequiringRNPT []string `json:"products_requiring_rnpt"` ProductsRequiringRNPT []string `json:"products_requiring_rnpt"`
} `json:"requirements"` } `json:"requirements"`
ShipmentDate string `json:"shipment_date"` ShipmentDate time.Time `json:"shipment_date"`
Status string `json:"status"` Status string `json:"status"`
TPLIntegrationType string `json:"tpl_integration_type"` TPLIntegrationType string `json:"tpl_integration_type"`
TrackingNumber string `json:"tracking_number"` TrackingNumber string `json:"tracking_number"`

View File

@@ -19,8 +19,8 @@ func TestListUnprocessedShipments(t *testing.T) {
&ListUnprocessedShipmentsParams{ &ListUnprocessedShipmentsParams{
Direction: "ASC", Direction: "ASC",
Filter: ListUnprocessedShipmentsFilter{ Filter: ListUnprocessedShipmentsFilter{
CutoffFrom: "2021-08-24T14:15:22Z", CutoffFrom: core.TimeFromString(t, "2021-08-24T14:15:22Z"),
CutoffTo: "2021-08-31T14:15:22Z", CutoffTo: core.TimeFromString(t, "2021-08-31T14:15:22Z"),
Status: "awaiting_packaging", Status: "awaiting_packaging",
}, },
Limit: 100, Limit: 100,

View File

@@ -2,6 +2,7 @@ package ozon
import ( import (
"net/http" "net/http"
"time"
core "github.com/diphantxm/ozon-api-client" core "github.com/diphantxm/ozon-api-client"
) )
@@ -34,10 +35,7 @@ type GetStocksInfoResponse struct {
core.CommonResponse core.CommonResponse
// Method Result // Method Result
Result GetStocksInfoResponseResult `json:"result,omitempty"` Result struct {
}
type GetStocksInfoResponseResult struct {
// Identifier of the last value on the page // Identifier of the last value on the page
// //
// To get the next values, specify the recieved value in the next request in the last_id parameter // To get the next values, specify the recieved value in the next request in the last_id parameter
@@ -47,10 +45,7 @@ type GetStocksInfoResponseResult struct {
Total int32 `json:"total,omitempty"` Total int32 `json:"total,omitempty"`
// Product details // Product details
Items []GetStocksInfoResponseItem `json:"items,omitempty"` Items []struct {
}
type GetStocksInfoResponseItem struct {
// Product identifier in the seller's system // Product identifier in the seller's system
OfferId string `json:"offer_id,omitempty"` OfferId string `json:"offer_id,omitempty"`
@@ -58,10 +53,7 @@ type GetStocksInfoResponseItem struct {
ProductId int64 `json:"product_id,omitempty"` ProductId int64 `json:"product_id,omitempty"`
// Stock details // Stock details
Stocks []GetStocksInfoResponseStock `json:"stocks,omitempty"` Stocks []struct {
}
type GetStocksInfoResponseStock struct {
// In a warehouse // In a warehouse
Present int32 `json:"present,omitempty"` Present int32 `json:"present,omitempty"`
@@ -70,6 +62,9 @@ type GetStocksInfoResponseStock struct {
// Warehouse type // Warehouse type
Type string `json:"type,omitempty" default:"ALL"` Type string `json:"type,omitempty" default:"ALL"`
} `json:"stocks,omitempty"`
} `json:"items,omitempty"`
} `json:"result,omitempty"`
} }
func (c Client) GetStocksInfo(params *GetStocksInfoParams) (*GetStocksInfoResponse, error) { func (c Client) GetStocksInfo(params *GetStocksInfoParams) (*GetStocksInfoResponse, error) {
@@ -95,17 +90,21 @@ type GetProductDetailsParams struct {
type GetProductDetailsResponse struct { type GetProductDetailsResponse struct {
core.CommonResponse core.CommonResponse
Result GetProductDetailsResponseResult `json:"Result"` Result struct {
}
type GetProductDetailsResponseResult struct {
Barcode string `json:"barcode"` Barcode string `json:"barcode"`
Barcodes []string `json:"barcodes"` Barcodes []string `json:"barcodes"`
BuyboxPrice string `json:"buybox_price"` BuyboxPrice string `json:"buybox_price"`
CategoryId int64 `json:"category_id"` CategoryId int64 `json:"category_id"`
ColorImage string `json:"color_image"` ColorImage string `json:"color_image"`
Commissions []GetProductDetailsResponseCommission `json:"commissions"` Commissions []struct {
CreatedAt string `json:"created_at"` DeliveryAmount float64 `json:"deliveryAmount"`
MinValue float64 `json:"minValue"`
Percent float64 `json:"percent"`
ReturnAmount float64 `json:"returnAmount"`
SaleSchema string `json:"saleSchema"`
Value float64 `json:"value"`
} `json:"commissions"`
CreatedAt time.Time `json:"created_at"`
FBOSKU int64 `json:"fbo_sku"` FBOSKU int64 `json:"fbo_sku"`
FBSSKU int64 `json:"fbs_sku"` FBSSKU int64 `json:"fbs_sku"`
Id int64 `json:"id"` Id int64 `json:"id"`
@@ -114,7 +113,11 @@ type GetProductDetailsResponseResult struct {
Images360 []string `json:"images360"` Images360 []string `json:"images360"`
HasDiscountedItem bool `json:"has_discounted_item"` HasDiscountedItem bool `json:"has_discounted_item"`
IsDiscounted bool `json:"is_discounted"` IsDiscounted bool `json:"is_discounted"`
DiscountedStocks GetProductDetailsResponseDiscountedStocks `json:"discounted_stocks"` DiscountedStocks struct {
Coming int32 `json:"coming"`
Present int32 `json:"present"`
Reserved int32 `json:"reserved"`
} `json:"discounted_stocks"`
IsKGT bool `json:"is_kgt"` IsKGT bool `json:"is_kgt"`
IsPrepayment bool `json:"is_prepayment"` IsPrepayment bool `json:"is_prepayment"`
IsPrepaymentAllowed bool `json:"is_prepayment_allowed"` IsPrepaymentAllowed bool `json:"is_prepayment_allowed"`
@@ -129,32 +132,7 @@ type GetProductDetailsResponseResult struct {
Price string `json:"price"` Price string `json:"price"`
PriceIndex string `json:"price_idnex"` PriceIndex string `json:"price_idnex"`
RecommendedPrice string `json:"recommended_price"` RecommendedPrice string `json:"recommended_price"`
Status GetProductDetailsResponseStatus `json:"status"` Status struct {
Sources []GetProductDetailsResponseSource `json:"sources"`
Stocks GetProductDetailsResponseStocks `json:"stocks"`
UpdatedAt string `json:"updated_at"`
VAT string `json:"vat"`
VisibilityDetails GetProductDetailsResponseDetails `json:"visibility_details"`
Visible bool `json:"visible"`
VolumeWeight float64 `json:"volume_weights"`
}
type GetProductDetailsResponseCommission struct {
DeliveryAmount float64 `json:"deliveryAmount"`
MinValue float64 `json:"minValue"`
Percent float64 `json:"percent"`
ReturnAmount float64 `json:"returnAmount"`
SaleSchema string `json:"saleSchema"`
Value float64 `json:"value"`
}
type GetProductDetailsResponseDiscountedStocks struct {
Coming int32 `json:"coming"`
Present int32 `json:"present"`
Reserved int32 `json:"reserved"`
}
type GetProductDetailsResponseStatus struct {
State string `json:"state"` State string `json:"state"`
StateFailed string `json:"state_failed"` StateFailed string `json:"state_failed"`
ModerateStatus string `json:"moderate_status"` ModerateStatus string `json:"moderate_status"`
@@ -166,7 +144,28 @@ type GetProductDetailsResponseStatus struct {
IsCreated bool `json:"is_created"` IsCreated bool `json:"is_created"`
StateTooltip string `json:"state_tooltip"` StateTooltip string `json:"state_tooltip"`
ItemErrors []GetProductDetailsResponseItemError `json:"item_errors"` ItemErrors []GetProductDetailsResponseItemError `json:"item_errors"`
StateUpdatedAt string `json:"state_updated_at"` StateUpdatedAt time.Time `json:"state_updated_at"`
} `json:"status"`
Sources []struct {
IsEnabled bool `json:"is_enabled"`
SKU int64 `json:"sku"`
Source string `json:"source"`
} `json:"sources"`
Stocks struct {
Coming int32 `json:"coming"`
Present int32 `json:"present"`
Reserved int32 `json:"reserved"`
} `json:"stocks"`
UpdatedAt time.Time `json:"updated_at"`
VAT string `json:"vat"`
VisibilityDetails struct {
ActiveProduct bool `json:"active_product"`
HasPrice bool `json:"has_price"`
HasStock bool `json:"has_stock"`
} `json:"visibility_details"`
Visible bool `json:"visible"`
VolumeWeight float64 `json:"volume_weights"`
} `json:"Result"`
} }
type GetProductDetailsResponseItemError struct { type GetProductDetailsResponseItemError struct {
@@ -177,29 +176,9 @@ type GetProductDetailsResponseItemError struct {
Field string `json:"field"` Field string `json:"field"`
AttributeId int64 `json:"attribute_id"` AttributeId int64 `json:"attribute_id"`
AttributeName string `json:"attribute_name"` AttributeName string `json:"attribute_name"`
OptionalDescriptionElements GetProductDetailsResponseOptionalDescriptionElements `json:"optional_description_elements"` OptionalDescriptionElements struct {
}
type GetProductDetailsResponseOptionalDescriptionElements struct {
PropertyName string `json:"property_name"` PropertyName string `json:"property_name"`
} } `json:"optional_description_elements"`
type GetProductDetailsResponseSource struct {
IsEnabled bool `json:"is_enabled"`
SKU int64 `json:"sku"`
Source string `json:"source"`
}
type GetProductDetailsResponseStocks struct {
Coming int32 `json:"coming"`
Present int32 `json:"present"`
Reserved int32 `json:"reserved"`
}
type GetProductDetailsResponseDetails struct {
ActiveProduct bool `json:"active_product"`
HasPrice bool `json:"has_price"`
HasStock bool `json:"has_stock"`
} }
func (c Client) GetProductDetails(params *GetProductDetailsParams) (*GetProductDetailsResponse, error) { func (c Client) GetProductDetails(params *GetProductDetailsParams) (*GetProductDetailsResponse, error) {