Skip to content

Commit

Permalink
Update December 17, 2024 (#129)
Browse files Browse the repository at this point in the history
  • Loading branch information
diPhantxm authored Jan 10, 2025
1 parent 7f705a4 commit 7654f5b
Show file tree
Hide file tree
Showing 2 changed files with 252 additions and 413 deletions.
186 changes: 130 additions & 56 deletions ozon/products.go
Original file line number Diff line number Diff line change
Expand Up @@ -105,28 +105,7 @@ func (c Products) GetStocksInfo(ctx context.Context, params *GetStocksInfoParams
return resp, nil
}

type GetProductDetailsParams struct {
// Product identifier in the seller's system
OfferId string `json:"offer_id,omitempty"`

// Product identifier
ProductId int64 `json:"product_id,omitempty"`

// Product identifier in the Ozon system, SKU
SKU int64 `json:"sku,omitempty"`
}

type GetProductDetailsResponse struct {
core.CommonResponse

// Request results
Result ProductDetails `json:"result"`
}

type ProductDetails struct {
// Barcode
Barcode string `json:"barcode"`

// All product barcodes
Barcodes []string `json:"barcodes"`

Expand All @@ -138,11 +117,20 @@ type ProductDetails struct {
// Category identifier
DescriptionCategoryId int64 `json:"description_category_id"`

// Markdown product stocks at the Ozon warehouse
DiscountedFBOStocks int32 `json:"discounted_fbo_stocks"`

// Details on errors when creating or validating a product
Errors []ProductDetailsError `json:"errors"`

// Indication that the product has similar markdown products at the Ozon warehouse
HasDiscountedFBOItem bool `json:"has_discounted_fbo_item"`

// Product type identifier
TypeId int64 `json:"type_id"`

// Marketing color
ColorImage string `json:"color_image"`
ColorImage []string `json:"color_image"`

// Commission fees details
Commissions []ProductDetailCommission `json:"commissions"`
Expand All @@ -166,7 +154,7 @@ type ProductDetails struct {
Images []string `json:"images"`

// Main product image
PrimaryImage string `json:"primary_image"`
PrimaryImage []string `json:"primary_image"`

// Array of 360 images
Images360 []string `json:"images360"`
Expand Down Expand Up @@ -260,20 +248,112 @@ type ProductDetails struct {

// 'true' if the item is archived automatically.
IsArchivedAuto bool `json:"is_autoarchived"`

// Product status details
Statuses ProductDetailsStatus `json:"statuses"`

// Product model details
ModelInfo ProductDetailsModelInfo `json:"model_info"`

// Indication of a super product
IsSuper bool `json:"is_super"`
}

type ProductDetailsError struct {
// Characteristic identifier
AttributeId int64 `json:"attribute_id"`

// Error code
Code string `json:"code"`

// Field in which the error occurred
Field string `json:"field"`

// Error level description
Level string `json:"level"`

// Status of the product with the error
State string `json:"state"`

// Error description
Texts ProductDetailsErrorText `json:"texts"`
}

type ProductDetailsErrorText struct {
// Attribute name
AttributeName string `json:"attribute_name"`

// Error description
Description string `json:"description"`

// Error code in the Ozon system
HintCode string `json:"hint_code"`

// Error message
Message string `json:"message"`

// Short description of the error
ShortDescription string `json:"short_description"`

// Parameters in which the error occurred
Params []NameValue `json:"params"`
}

type NameValue struct {
Name string `json:"name"`

Value string `json:"value"`
}

type ProductDetailsStatus struct {
// true, if the product is created correctly
IsCreated bool `json:"is_created"`

// Moderation status
ModerateStatus string `json:"moderate_status"`

// Product status
Status string `json:"status"`

// Product status description
Description string `json:"status_description"`

// Status of the product where the error occurred
Failed string `json:"status_failed"`

// Product status name
Name string `json:"status_name"`

// Status description
Tooltip string `json:"status_tooltip"`

// Time of the last status change
UpdatedAt time.Time `json:"status_updated_at"`

// Validation status
ValidationStatus string `json:"validation_status"`
}

type ProductDetailsModelInfo struct {
// Number of products in the response
Count int64 `json:"count"`

// Identifier of the product model
ModelId int64 `json:"model_id"`
}

type ProductDetailCommission struct {
// Delivery cost
DeliveryAmount float64 `json:"deliveryAmount"`
DeliveryAmount float64 `json:"delivery_amount"`

// Commission percentage
Percent float64 `json:"percent"`

// Return cost
ReturnAmount float64 `json:"returnAmount"`
ReturnAmount float64 `json:"return_amount"`

// Sale scheme
SaleSchema string `json:"saleSchema"`
SaleSchema string `json:"sale_schema"`

// Commission fee amount
Value float64 `json:"value"`
Expand All @@ -286,8 +366,8 @@ type ProductDetailPriceIndex struct {
// Competitors' product price on Ozon
OzonIndexData ProductDetailPriceIndexOzon `json:"ozon_index_data"`

// Resulting price index of the product
PriceIndex string `json:"price_index"`
// Types of price index
ColorIndex string `json:"color_index"`

// Price of your product on other marketplaces
SelfMarketplaceIndexData ProductDetailPriceIndexSelfMarketplace `json:"self_marketplaces_index_data"`
Expand Down Expand Up @@ -365,25 +445,42 @@ type ProductDetailStatus struct {
}

type ProductDetailSource struct {
// Indication that the source is taken into account when calculating the market value
IsEnabled bool `json:"is_enabled"`
// Product creation date
CreatedAt time.Time `json:"created_at"`

// Product identifier in the Ozon system, SKU
SKU int64 `json:"sku"`

// Link to the source
Source string `json:"source"`

// Package type
ShipmentType string `json:"shipment_type"`

// List of MOQs with products
QuantCode string `json:"quant_code"`
}

type ProductDetailStock struct {
// Supply expected
Coming int32 `json:"coming"`
// true, if there are stocks at the warehouses
HasStock bool `json:"has_stock"`

// Status of product stocks
Stocks []ProductDetailStockStock `json:"stocks"`
}

type ProductDetailStockStock struct {
// Product identifier in the Ozon system, SKU
SKU int64 `json:"sku"`

// Currently at the warehouse
Present int32 `json:"present"`

// Reserved
Reserved int32 `json:"reserved"`

// Sales scheme
Source string `json:"source"`
}

type ProductDetailVisibilityDetails struct {
Expand Down Expand Up @@ -438,24 +535,6 @@ type GetProductDetailsResponseItemError struct {
OptionalDescriptionElements map[string]string `json:"optional_description_elements"`
}

// Get product details
//
// Check a minimum product price with all promotions applied in your personal account.
// The min_price parameter from the method response is in development and returns 0
func (c Products) GetProductDetails(ctx context.Context, params *GetProductDetailsParams) (*GetProductDetailsResponse, error) {
url := "/v2/product/info"

resp := &GetProductDetailsResponse{}

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 UpdateStocksParams struct {
// Stock details
Stocks []UpdateStocksStock `json:"stocks"`
Expand Down Expand Up @@ -1374,11 +1453,6 @@ type ListProductsByIDsParams struct {
type ListProductsByIDsResponse struct {
core.CommonResponse

// Request results
Result ListProductsByIDsResult `json:"result"`
}

type ListProductsByIDsResult struct {
// Data array
Items []ProductDetails `json:"items"`
}
Expand All @@ -1389,7 +1463,7 @@ type ListProductsByIDsResult struct {
//
// For each shipment in the items array the fields match the ones recieved in the /v2/product/info method
func (c Products) ListProductsByIDs(ctx context.Context, params *ListProductsByIDsParams) (*ListProductsByIDsResponse, error) {
url := "/v2/product/info/list"
url := "/v3/product/info/list"

resp := &ListProductsByIDsResponse{}

Expand Down
Loading

0 comments on commit 7654f5b

Please sign in to comment.