diff --git a/api/api.go b/api/api.go index 39fc753..4c97333 100644 --- a/api/api.go +++ b/api/api.go @@ -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 { diff --git a/api/products.go b/api/products.go index 1525a1c..ced26e2 100644 --- a/api/products.go +++ b/api/products.go @@ -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 + +}