Pavel Sinitsin
99c8dbd911
Implemented `GetProductByArticle` to fetch product details by article. Added `GetRemainsAndPlanresidues` to obtain inventory balances for categories. These enhancements improve the API's capability to manage product and inventory information.
90 lines
1.9 KiB
Go
90 lines
1.9 KiB
Go
package api
|
|
|
|
import (
|
|
"errors"
|
|
"gitea.24example.ru/spavelit/bpiek/model"
|
|
)
|
|
|
|
var products []model.Product
|
|
var remainsAndPlanresidues []model.ShortProduct
|
|
|
|
func (a *Api) GetProducts() ([]model.Product, error) {
|
|
|
|
if len(products) > 0 {
|
|
return products, nil
|
|
}
|
|
|
|
parentCategories, err := a.GetParentCategories()
|
|
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
for _, category := range parentCategories {
|
|
categoriesAndProduct, err := a.GetCategoriesAndProductsBySlugParentCategory(category.Slug)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
if len(categoriesAndProduct.Products) != 0 {
|
|
products = append(products, categoriesAndProduct.Products...)
|
|
}
|
|
}
|
|
|
|
return products, nil
|
|
}
|
|
|
|
func (a *Api) GetProductByArticle(article string) (model.Product, error) {
|
|
apiResponse, err := a.Client.HTTPClient.
|
|
R().
|
|
SetResult(&model.Product{}).
|
|
Get("client/products/" + article)
|
|
|
|
if err != nil {
|
|
return model.Product{}, err
|
|
}
|
|
|
|
if apiResponse.StatusCode() != 200 {
|
|
return model.Product{}, errors.New(
|
|
"error getting product by article: " + article)
|
|
}
|
|
|
|
return apiResponse.Result().(model.Product), nil
|
|
}
|
|
|
|
func (a *Api) GetRemainsAndPlanresidues() ([]model.ShortProduct, error) {
|
|
if len(remainsAndPlanresidues) != 0 {
|
|
return remainsAndPlanresidues, nil
|
|
}
|
|
|
|
parentCategories, err := a.GetParentCategories()
|
|
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
for _, category := range parentCategories {
|
|
apiResponse, err := a.Client.HTTPClient.
|
|
R().
|
|
SetResult(&model.RemainsAndPlanresiduesResponse{}).
|
|
Get("client/category/" + category.Slug + "/balances-json")
|
|
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
if apiResponse.StatusCode() != 200 {
|
|
return nil, errors.New("file remains and planresidues not found")
|
|
}
|
|
|
|
result := apiResponse.Result().(model.RemainsAndPlanresiduesResponse)
|
|
|
|
if len(result.Products) != 0 {
|
|
remainsAndPlanresidues = append(remainsAndPlanresidues, result.Products...)
|
|
}
|
|
}
|
|
|
|
return remainsAndPlanresidues, nil
|
|
|
|
}
|