Add methods to retrieve products and inventory data

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.
This commit is contained in:
Павел Синицин 2024-09-07 22:02:10 +03:00
parent 8c3541a892
commit 99c8dbd911
Signed by: spavelit
GPG Key ID: 2FEC8CEAE5A95DD1
2 changed files with 62 additions and 1 deletions

View File

@ -13,7 +13,10 @@ type Method interface {
GetParentCategories() ([]model.Category, error)
GetCategories() ([]model.Category, error)
GetTreeCategories() ([]model.TreeCategories, error)
GetProducts() ([]model.Product, error)
GetProductByArticle(article string) (model.Product, error)
GetRemainsAndPlanresidues() ([]model.ShortProduct, error)
}
func NewApi(credentials client.Credentials) Method {

View File

@ -1,8 +1,12 @@
package api
import "gitea.24example.ru/spavelit/bpiek/model"
import (
"errors"
"gitea.24example.ru/spavelit/bpiek/model"
)
var products []model.Product
var remainsAndPlanresidues []model.ShortProduct
func (a *Api) GetProducts() ([]model.Product, error) {
@ -29,3 +33,57 @@ func (a *Api) GetProducts() ([]model.Product, error) {
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
}