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.StatusCode = httpResp.StatusCode
if httpResp.StatusCode == http.StatusOK {
err = json.Unmarshal(body, &response)
} else {
err = json.Unmarshal(body, &response.Data)
} else {
err = json.Unmarshal(body, &response)
}
if err != nil {
return nil, err

10
core.go
View File

@@ -4,6 +4,8 @@ import (
"fmt"
"net/http"
"reflect"
"testing"
"time"
)
type CommonResponse struct {
@@ -99,3 +101,11 @@ func isZero(v interface{}) (bool, error) {
}
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 (
"net/http"
"time"
core "github.com/diphantxm/ozon-api-client"
)
@@ -15,14 +16,14 @@ type ListUnprocessedShipmentsParams struct {
}
type ListUnprocessedShipmentsFilter struct {
CutoffFrom string `json:"cutoff_from"`
CutoffTo string `json:"cutoff_to"`
DeliveringDateFrom string `json:"delivering_date_from"`
DeliveringDateTo string `json:"delivering_date_to"`
DeliveryMethodId []int64 `json:"deliveryMethodId"`
ProviderId []int64 `json:"provider_id"`
Status string `json:"status"`
WarehouseId []int64 `json:"warehouse_id"`
CutoffFrom time.Time `json:"cutoff_from"`
CutoffTo time.Time `json:"cutoff_to"`
DeliveringDateFrom time.Time `json:"delivering_date_from"`
DeliveringDateTo time.Time `json:"delivering_date_to"`
DeliveryMethodId []int64 `json:"deliveryMethodId"`
ProviderId []int64 `json:"provider_id"`
Status string `json:"status"`
WarehouseId []int64 `json:"warehouse_id"`
}
type ListUnprocessedShipmentsWith struct {
@@ -50,18 +51,18 @@ type ListUnprocessedShipmentsPosting struct {
} `json:"addressee"`
AnalyticsData struct {
City string `json:"city"`
DeliveryDateBegin string `json:"delivery_date_begin"`
DeliveryDateEnd string `json:"delivery_date_end"`
DeliveryType string `json:"delivery_type"`
IsLegal bool `json:"is_legal"`
IsPremium bool `json:"is_premium"`
PaymentTypeGroupName string `json:"payment_type_group_name"`
Region string `json:"region"`
TPLProvider string `json:"tpl_provider"`
TPLProviderId int64 `json:"tpl_provider_id"`
Warehouse string `json:"warehouse"`
WarehouseId int64 `json:"warehouse_id"`
City string `json:"city"`
DeliveryDateBegin time.Time `json:"delivery_date_begin"`
DeliveryDateEnd time.Time `json:"delivery_date_end"`
DeliveryType string `json:"delivery_type"`
IsLegal bool `json:"is_legal"`
IsPremium bool `json:"is_premium"`
PaymentTypeGroupName string `json:"payment_type_group_name"`
Region string `json:"region"`
TPLProvider string `json:"tpl_provider"`
TPLProviderId int64 `json:"tpl_provider_id"`
Warehouse string `json:"warehouse"`
WarehouseId int64 `json:"warehouse_id"`
} `json:"analytics_data"`
Barcodes struct {
@@ -85,7 +86,7 @@ type ListUnprocessedShipmentsPosting struct {
Comment string `json:"comment"`
Country string `json:"country"`
District string `json:"district"`
Latitude float64 `json:'latitude"`
Latitude float64 `json:"latitude"`
Longitude float64 `json:"longitude"`
ProviderPVZCode string `json:"provider_pvz_code"`
PVZCode int64 `json:"pvz_code"`
@@ -99,7 +100,8 @@ type ListUnprocessedShipmentsPosting struct {
Phone string `json:"phone"`
} `json:"customer"`
DeliveringDate string `json:"delivering_date"`
DeliveringDate time.Time `json:"delivering_date"`
DeliveryMethod struct {
Id int64 `json:"id"`
Name string `json:"name"`
@@ -125,9 +127,9 @@ type ListUnprocessedShipmentsPosting struct {
OldPrice float64 `json:"old_price"`
Payout float64 `json:"payout"`
Picking struct {
Amount float64 `json:"amount"`
Moment string `json:"moment"`
Tag string `json:"tag"`
Amount float64 `json:"amount"`
Moment time.Time `json:"moment"`
Tag string `json:"tag"`
} `json:"picking"`
Price float64 `json:"price"`
ProductId int64 `json:"product_id"`
@@ -137,16 +139,16 @@ type ListUnprocessedShipmentsPosting struct {
} `json:"products"`
}
InProccessAt string `json:"in_process_at"`
IsExpress bool `json:"is_express"`
IsMultibox bool `json:"is_multibox"`
MultiBoxQuantity int32 `json:"multi_box_qty"`
OrderId int64 `json:"order_id"`
OrderNumber string `json:"order_number"`
ParentPostingNumber string `json:"parent_posting_number"`
PostingNumber string `json:"posting_number"`
InProccessAt time.Time `json:"in_process_at"`
IsExpress bool `json:"is_express"`
IsMultibox bool `json:"is_multibox"`
MultiBoxQuantity int32 `json:"multi_box_qty"`
OrderId int64 `json:"order_id"`
OrderNumber string `json:"order_number"`
ParentPostingNumber string `json:"parent_posting_number"`
PostingNumber string `json:"posting_number"`
Products struct {
Products []struct {
MandatoryMark []string `json:"mandatory_mark"`
Name string `json:"name"`
OfferId string `json:"offer_id"`
@@ -163,10 +165,10 @@ type ListUnprocessedShipmentsPosting struct {
ProductsRequiringRNPT []string `json:"products_requiring_rnpt"`
} `json:"requirements"`
ShipmentDate string `json:"shipment_date"`
Status string `json:"status"`
TPLIntegrationType string `json:"tpl_integration_type"`
TrackingNumber string `json:"tracking_number"`
ShipmentDate time.Time `json:"shipment_date"`
Status string `json:"status"`
TPLIntegrationType string `json:"tpl_integration_type"`
TrackingNumber string `json:"tracking_number"`
}
type MarketplaceServices struct {

View File

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

View File

@@ -2,6 +2,7 @@ package ozon
import (
"net/http"
"time"
core "github.com/diphantxm/ozon-api-client"
)
@@ -34,42 +35,36 @@ type GetStocksInfoResponse struct {
core.CommonResponse
// Method Result
Result GetStocksInfoResponseResult `json:"result,omitempty"`
}
Result struct {
// 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
LastId string `json:"last_id,omitempty"`
type GetStocksInfoResponseResult struct {
// 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
LastId string `json:"last_id,omitempty"`
// The number of unique products for which information about stocks is displayed
Total int32 `json:"total,omitempty"`
// The number of unique products for which information about stocks is displayed
Total int32 `json:"total,omitempty"`
// Product details
Items []struct {
// Product identifier in the seller's system
OfferId string `json:"offer_id,omitempty"`
// Product details
Items []GetStocksInfoResponseItem `json:"items,omitempty"`
}
// Product identifier
ProductId int64 `json:"product_id,omitempty"`
type GetStocksInfoResponseItem struct {
// Product identifier in the seller's system
OfferId string `json:"offer_id,omitempty"`
// Stock details
Stocks []struct {
// In a warehouse
Present int32 `json:"present,omitempty"`
// Product identifier
ProductId int64 `json:"product_id,omitempty"`
// Reserved
Reserved int32 `json:"reserved,omitempty"`
// Stock details
Stocks []GetStocksInfoResponseStock `json:"stocks,omitempty"`
}
type GetStocksInfoResponseStock struct {
// In a warehouse
Present int32 `json:"present,omitempty"`
// Reserved
Reserved int32 `json:"reserved,omitempty"`
// Warehouse type
Type string `json:"type,omitempty" default:"ALL"`
// Warehouse type
Type string `json:"type,omitempty" default:"ALL"`
} `json:"stocks,omitempty"`
} `json:"items,omitempty"`
} `json:"result,omitempty"`
}
func (c Client) GetStocksInfo(params *GetStocksInfoParams) (*GetStocksInfoResponse, error) {
@@ -95,111 +90,95 @@ type GetProductDetailsParams struct {
type GetProductDetailsResponse struct {
core.CommonResponse
Result GetProductDetailsResponseResult `json:"Result"`
}
type GetProductDetailsResponseResult struct {
Barcode string `json:"barcode"`
Barcodes []string `json:"barcodes"`
BuyboxPrice string `json:"buybox_price"`
CategoryId int64 `json:"category_id"`
ColorImage string `json:"color_image"`
Commissions []GetProductDetailsResponseCommission `json:"commissions"`
CreatedAt string `json:"created_at"`
FBOSKU int64 `json:"fbo_sku"`
FBSSKU int64 `json:"fbs_sku"`
Id int64 `json:"id"`
Images []string `json:"images"`
PrimaryImage string `json:"primary_image"`
Images360 []string `json:"images360"`
HasDiscountedItem bool `json:"has_discounted_item"`
IsDiscounted bool `json:"is_discounted"`
DiscountedStocks GetProductDetailsResponseDiscountedStocks `json:"discounted_stocks"`
IsKGT bool `json:"is_kgt"`
IsPrepayment bool `json:"is_prepayment"`
IsPrepaymentAllowed bool `json:"is_prepayment_allowed"`
CurrencyCode string `json:"currency_code"`
MarketingPrice string `json:"marketing_price"`
MinOzonPrice string `json:"min_ozon_price"`
MinPrice string `json:"min_price"`
Name string `json:"name"`
OfferId string `json:"offer_id"`
OldPrice string `json:"old_price"`
PremiumPrice string `json:"premium_price"`
Price string `json:"price"`
PriceIndex string `json:"price_idnex"`
RecommendedPrice string `json:"recommended_price"`
Status GetProductDetailsResponseStatus `json:"status"`
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"`
StateFailed string `json:"state_failed"`
ModerateStatus string `json:"moderate_status"`
DeclineReasons []string `json:"decline_reasons"`
ValidationsState string `json:"validation_state"`
StateName string `json:"state_name"`
StateDescription string `json:"state_description"`
IsFailed bool `json:"is_failed"`
IsCreated bool `json:"is_created"`
StateTooltip string `json:"state_tooltip"`
ItemErrors []GetProductDetailsResponseItemError `json:"item_errors"`
StateUpdatedAt string `json:"state_updated_at"`
Result struct {
Barcode string `json:"barcode"`
Barcodes []string `json:"barcodes"`
BuyboxPrice string `json:"buybox_price"`
CategoryId int64 `json:"category_id"`
ColorImage string `json:"color_image"`
Commissions []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"`
} `json:"commissions"`
CreatedAt time.Time `json:"created_at"`
FBOSKU int64 `json:"fbo_sku"`
FBSSKU int64 `json:"fbs_sku"`
Id int64 `json:"id"`
Images []string `json:"images"`
PrimaryImage string `json:"primary_image"`
Images360 []string `json:"images360"`
HasDiscountedItem bool `json:"has_discounted_item"`
IsDiscounted bool `json:"is_discounted"`
DiscountedStocks struct {
Coming int32 `json:"coming"`
Present int32 `json:"present"`
Reserved int32 `json:"reserved"`
} `json:"discounted_stocks"`
IsKGT bool `json:"is_kgt"`
IsPrepayment bool `json:"is_prepayment"`
IsPrepaymentAllowed bool `json:"is_prepayment_allowed"`
CurrencyCode string `json:"currency_code"`
MarketingPrice string `json:"marketing_price"`
MinOzonPrice string `json:"min_ozon_price"`
MinPrice string `json:"min_price"`
Name string `json:"name"`
OfferId string `json:"offer_id"`
OldPrice string `json:"old_price"`
PremiumPrice string `json:"premium_price"`
Price string `json:"price"`
PriceIndex string `json:"price_idnex"`
RecommendedPrice string `json:"recommended_price"`
Status struct {
State string `json:"state"`
StateFailed string `json:"state_failed"`
ModerateStatus string `json:"moderate_status"`
DeclineReasons []string `json:"decline_reasons"`
ValidationsState string `json:"validation_state"`
StateName string `json:"state_name"`
StateDescription string `json:"state_description"`
IsFailed bool `json:"is_failed"`
IsCreated bool `json:"is_created"`
StateTooltip string `json:"state_tooltip"`
ItemErrors []GetProductDetailsResponseItemError `json:"item_errors"`
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 {
Code string `json:"code"`
State string `json:"state"`
Level string `json:"level"`
Description string `json:"description"`
Field string `json:"field"`
AttributeId int64 `json:"attribute_id"`
AttributeName string `json:"attribute_name"`
OptionalDescriptionElements GetProductDetailsResponseOptionalDescriptionElements `json:"optional_description_elements"`
}
type GetProductDetailsResponseOptionalDescriptionElements struct {
PropertyName string `json:"property_name"`
}
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"`
Code string `json:"code"`
State string `json:"state"`
Level string `json:"level"`
Description string `json:"description"`
Field string `json:"field"`
AttributeId int64 `json:"attribute_id"`
AttributeName string `json:"attribute_name"`
OptionalDescriptionElements struct {
PropertyName string `json:"property_name"`
} `json:"optional_description_elements"`
}
func (c Client) GetProductDetails(params *GetProductDetailsParams) (*GetProductDetailsResponse, error) {