Update December 26, 2024 (#132)

This commit is contained in:
Kirill
2025-01-23 01:22:28 +03:00
committed by GitHub
parent 804a4f3c2b
commit 040bc23ebc
6 changed files with 75 additions and 217 deletions

View File

@@ -472,64 +472,6 @@ func (c FBO) GetSupplyRequestInfo(ctx context.Context, params *GetSupplyRequestI
return resp, nil
}
type ListProductsInSupplyRequestParams struct {
// Number of the page returned in the query
Page int32 `json:"page"`
// Number of elements on the page
PageSize int32 `json:"page_size"`
// Supply request identifier
SupplyOrderId int64 `json:"supply_order_id"`
}
type ListProductsInSupplyRequestResponse struct {
core.CommonResponse
// Indicates that the response contains not the entire array of supply requests:
// - true — make a new request with a different page and page_size values to get the remaining products;
// - false — the entire array of product was returned in the response
HasNext bool `json:"has_next"`
// Products list
Items []ListProductsInSupplyRequestItem `json:"items"`
// Total number of products in the request
TotalItemsCount int32 `json:"total_items_count"`
}
type ListProductsInSupplyRequestItem struct {
// Link to product image
IconPath string `json:"icon_path"`
// Product name
Name string `json:"name"`
// Product ID
OfferId string `json:"offer_id"`
// Product quantity
Quantity int64 `json:"quantity"`
// Product identifier in the Ozon system, SKU
SKU int64 `json:"sku"`
}
// List of products in the sullpy request
func (c FBO) ListProductsInSupplyRequest(ctx context.Context, params *ListProductsInSupplyRequestParams) (*ListProductsInSupplyRequestResponse, error) {
url := "/v1/supply-order/items"
resp := &ListProductsInSupplyRequestResponse{}
response, err := c.client.Request(ctx, http.MethodPost, url, params, resp, nil)
if err != nil {
return nil, err
}
response.CopyCommonResponse(&resp.CommonResponse)
return resp, nil
}
type GetWarehouseWorkloadResponse struct {
core.CommonResponse

View File

@@ -456,68 +456,6 @@ func TestGetSupplyRequestInfo(t *testing.T) {
}
}
func TestListProductsInSupplyRequest(t *testing.T) {
t.Parallel()
tests := []struct {
statusCode int
headers map[string]string
params *ListProductsInSupplyRequestParams
response string
}{
// Test Ok
{
http.StatusOK,
map[string]string{"Client-Id": "my-client-id", "Api-Key": "my-api-key"},
&ListProductsInSupplyRequestParams{
Page: 0,
PageSize: 0,
SupplyOrderId: 0,
},
`{
"has_next": true,
"items": [
{
"icon_path": "string",
"name": "string",
"offer_id": "string",
"quantity": 0,
"sku": 0
}
],
"total_items_count": 0
}`,
},
// Test No Client-Id or Api-Key
{
http.StatusUnauthorized,
map[string]string{},
&ListProductsInSupplyRequestParams{},
`{
"code": 16,
"message": "Client-Id and Api-Key headers are required"
}`,
},
}
for _, test := range tests {
c := NewMockClient(core.NewMockHttpHandler(test.statusCode, test.response, test.headers))
ctx, _ := context.WithTimeout(context.Background(), testTimeout)
resp, err := c.FBO().ListProductsInSupplyRequest(ctx, test.params)
if err != nil {
t.Error(err)
continue
}
compareJsonResponse(t, test.response, &ListProductsInSupplyRequestResponse{})
if resp.StatusCode != test.statusCode {
t.Errorf("got wrong status code: got: %d, expected: %d", resp.StatusCode, test.statusCode)
}
}
}
func TestGetWarehouseWorkload(t *testing.T) {
t.Parallel()

View File

@@ -2053,10 +2053,8 @@ type GetProductPriceInfoParams struct {
// Filter by product
Filter GetProductPriceInfoFilter `json:"filter"`
// Identifier of the last value on page.
//
// To get the next values, specify the recieved value in the next request in the `last_id` parameter
LastId string `json:"last_id"`
// Cursor for the next data sample
Cursor string `json:"cursor"`
// Number of values per page. Minimum is 1, maximum is 1000
Limit int32 `json:"limit"`
@@ -2076,7 +2074,6 @@ type GetProductPriceInfoFilter struct {
type GetProductPriceInfoResponse struct {
core.CommonResponse
// Result
Result GetProductPriceInfoResult `json:"result"`
}
@@ -2084,10 +2081,8 @@ type GetProductPriceInfoResult struct {
// Products list
Items []GetProductPriceInfoResultItem `json:"items"`
// Identifier of the last value on page. Leave this field blank in the first request.
//
// To get the next values, specify last_id from the response of the previous request
LastId string `json:"last_id"`
// Cursor for the next data sample
Cursor string `json:"cursor"`
// Products number in the list
Total int32 `json:"total"`
@@ -2109,11 +2104,6 @@ type GetProductPriceInfoResultItem struct {
// Product price
Price GetProductPriceInfoResultItemPrice `json:"price"`
// Deprected: price index
//
// Use PriceIndexes instead
PriceIndex string `json:"price_index"`
// Product price indexes
PriceIndexes GetProductPriceInfoResultItemPriceIndexes `json:"price_indexes"`
@@ -2201,11 +2191,11 @@ type GetProductPriceInfoResultItemMarketingActionsAction struct {
// Date and time when the seller's promotion ends
DateTo time.Time `json:"date_to"`
// Discount on the seller's promotion
DiscountValue string `json:"discount_value"`
// Promotion name
Title string `json:"title"`
// Discount on the seller's promotion
Value float64 `json:"value"`
}
type GetProductPriceInfoResultItemPrice struct {
@@ -2216,72 +2206,50 @@ type GetProductPriceInfoResultItemPrice struct {
CurrencyCode string `json:"currency_code"`
// Product price including all promotion discounts. This value will be indicated on the Ozon storefront
MarketingPrice string `json:"marketing_price"`
MarketingPrice float64 `json:"marketing_price"`
// Product price with seller's promotions applied
MarketingSellerPrice string `json:"marketing_seller_price"`
MarketingSellerPrice float64 `json:"marketing_seller_price"`
// Minimum price for similar products on Ozon
MinOzonPrice string `json:"min_ozon_price"`
MinOzonPrice float64 `json:"min_ozon_price"`
// Minimum product price with all promotions applied
MinPrice string `json:"min_price"`
MinPrice float64 `json:"min_price"`
// Price before discounts. Displayed strikethrough on the product description page
OldPrice string `json:"old_price"`
OldPrice float64 `json:"old_price"`
// Product price including discounts. This value is shown on the product description page
Price string `json:"price"`
Price float64 `json:"price"`
// Retailer price
RetailPrice string `json:"retail_price"`
RetailPrice float64 `json:"retail_price"`
// Product VAT rate
VAT string `json:"vat"`
VAT float64 `json:"vat"`
}
type GetProductPriceInfoResultItemPriceIndexes struct {
// Resulting price index of the product
ColorIndex string `json:"color_index"`
// Competitors' product price on other marketplaces
ExternalIndexData GetProductPriceInfoResultItemPriceIndexesExternal `json:"external_index_data"`
ExternalIndexData GetProductPriceInfoResultItemPriceIndexesValue `json:"external_index_data"`
// Competitors' product price on Ozon
OzonIndexData GetProductPriceInfoResultItemPriceIndexesOzon `json:"ozon_index_data"`
// Resulting price index of the product
PriceIndex string `json:"price_index"`
OzonIndexData GetProductPriceInfoResultItemPriceIndexesValue `json:"ozon_index_data"`
// Price of your product on other marketplaces
SelfMarketplaceIndexData GetProductPriceInfoResultItemPriceIndexesSelfMarketplace `json:"self_marketplaces_index_data"`
SelfMarketplaceIndexData GetProductPriceInfoResultItemPriceIndexesValue `json:"self_marketplaces_index_data"`
}
type GetProductPriceInfoResultItemPriceIndexesExternal struct {
// Minimum competitors' product price on other marketplaces
MinimalPrice string `json:"minimal_price"`
// Price currency
MinimalPriceCurrency string `json:"minimal_price_currency"`
// Price index value
PriceIndexValue float64 `json:"price_index_value"`
}
type GetProductPriceInfoResultItemPriceIndexesOzon struct {
// Minimum competitors' product price on Ozon
MinimalPrice string `json:"minimal_price"`
// Price currency
MinimalPriceCurrency string `json:"minimal_price_currency"`
// Price index value
PriceIndexValue float64 `json:"price_index_value"`
}
type GetProductPriceInfoResultItemPriceIndexesSelfMarketplace struct {
type GetProductPriceInfoResultItemPriceIndexesValue struct {
// Minimum price of your product on other marketplaces
MinimalPrice string `json:"minimal_price"`
MinimalPrice float64 `json:"min_price"`
// Price currency
MinimalPriceCurrency string `json:"minimal_price_currency"`
MinimalPriceCurrency string `json:"min_price_currency"`
// Price index value
PriceIndexValue float64 `json:"price_index_value"`
@@ -2293,7 +2261,7 @@ type GetProductPriceInfoResultItemPriceIndexesSelfMarketplace struct {
// The `fbo_direct_flow_trans_max_amount` and `fbo_direct_flow_trans_min_amount` parameters
// from the method response are in development and return 0
func (c Products) GetProductPriceInfo(ctx context.Context, params *GetProductPriceInfoParams) (*GetProductPriceInfoResponse, error) {
url := "/v4/product/info/prices"
url := "/v5/product/info/prices"
resp := &GetProductPriceInfoResponse{}

View File

@@ -2139,66 +2139,72 @@ func TestGetProductPriceInfo(t *testing.T) {
},
`{
"result": {
"cursor": "string",
"items": [
{
"acquiring": 0,
"product_id": 243686911,
"commissions": {
"fbo_deliv_to_customer_amount": 14.75,
"fbo_direct_flow_trans_max_amount": 46.5,
"fbo_direct_flow_trans_min_amount": 31,
"fbo_return_flow_amount": 50,
"fbs_deliv_to_customer_amount": 60,
"fbs_direct_flow_trans_max_amount": 61.5,
"fbs_direct_flow_trans_min_amount": 41,
"fbs_first_mile_max_amount": 25,
"fbs_first_mile_min_amount": 0,
"fbs_return_flow_amount": 40,
"sales_percent_fbo": 15,
"sales_percent_fbs": 0
},
"marketing_actions": {
"actions": [
{
"date_from": "2024-12-13T06:49:37.591Z",
"date_to": "2024-12-13T06:49:37.591Z",
"title": "string",
"value": 0
}
],
"current_period_from": "2024-12-13T06:49:37.591Z",
"current_period_to": "2024-12-13T06:49:37.591Z",
"ozon_actions_exist": true
},
"offer_id": "356792",
"price": {
"auto_action_enabled": true,
"currency_code": "RUB",
"price": "499.0000",
"old_price": "579.0000",
"retail_price": "",
"vat": "0.200000",
"min_ozon_price": "",
"marketing_price": "",
"marketing_seller_price": "",
"auto_action_enabled": true
"marketing_price": 0,
"marketing_seller_price": 0,
"min_price": 0,
"old_price": 579,
"price": 499,
"retail_price": 0,
"vat": 0.2
},
"price_indexes": {
"color_index": "WITHOUT_INDEX",
"external_index_data": {
"minimal_price": "string",
"minimal_price_currency": "string",
"min_price": 0,
"min_price_currency": "string",
"price_index_value": 0
},
"ozon_index_data": {
"minimal_price": "string",
"minimal_price_currency": "string",
"min_price": 0,
"min_price_currency": "string",
"price_index_value": 0
},
"price_index": "WITHOUT_INDEX",
"self_marketplaces_index_data": {
"minimal_price": "string",
"minimal_price_currency": "string",
"min_price": 0,
"min_price_currency": "string",
"price_index_value": 0
}
},
"commissions": {
"sales_percent": 15,
"sales_percent_fbo": 15,
"sales_percent_fbs": 0,
"fbo_fulfillment_amount": 0,
"fbo_direct_flow_trans_min_amount": 31,
"fbo_direct_flow_trans_max_amount": 46.5,
"fbo_deliv_to_customer_amount": 14.75,
"fbo_return_flow_amount": 50,
"fbo_return_flow_trans_min_amount": 21.7,
"fbo_return_flow_trans_max_amount": 21.7,
"fbs_first_mile_min_amount": 0,
"fbs_first_mile_max_amount": 25,
"fbs_direct_flow_trans_min_amount": 41,
"fbs_direct_flow_trans_max_amount": 61.5,
"fbs_deliv_to_customer_amount": 60,
"fbs_return_flow_amount": 40,
"fbs_return_flow_trans_min_amount": 41,
"fbs_return_flow_trans_max_amount": 61.5
},
"marketing_actions": null,
"product_id": 243686911,
"volume_weight": 0
}
],
"total": 1,
"last_id": "ceVуbA=="
"total": 0
}
}`,
},

View File

@@ -161,6 +161,9 @@ type GetListOfDeliveryMethodsResult struct {
// Delivery service identifier
ProviderId int64 `json:"provider_id"`
// Minimum time to package an order in minutes according to warehouse settings
SLACutIn int64 `json:"sla_cut_in"`
// Delivery method status:
// - NEW—created,
// - EDITED—being edited,

View File

@@ -127,7 +127,8 @@ func TestGetListOfDeliveryMethods(t *testing.T) {
"template_id": 0,
"warehouse_id": 15588127982000,
"created_at": "2019-04-04T15:22:31.048202Z",
"updated_at": "2021-08-15T10:21:44.854209Z"
"updated_at": "2021-08-15T10:21:44.854209Z",
"sla_cut_in": 1440
}
],
"has_next": false