bpiek/api/categories.go
Pavel Sinitsin 05b8245f11
Refactor category variables and client authentication.
Renamed category variables to use underscores for better clarity and consistency. Updated client authentication method to accept username and password directly instead of using a Credentials struct.
2024-09-08 19:04:06 +03:00

101 lines
2.3 KiB
Go

package api
import (
"errors"
"gitea.24example.ru/spavelit/bpiek/model"
"gitea.24example.ru/spavelit/bpiek/utils"
)
var _categories []model.Category
var _parentCategories []model.Category
var _treeCategories []model.TreeCategories
func (a *Api) GetCategories() ([]model.Category, error) {
if len(_categories) > 0 {
return _categories, nil
}
parentCategories, err := a.GetParentCategories()
if err != nil {
return nil, err
}
for _, category := range parentCategories {
_categories = append(_categories, category)
categoriesAndProduct, err := a.GetCategoriesAndProductsBySlugParentCategory(category.Slug)
if err != nil {
return nil, err
}
if len(categoriesAndProduct.Categories) != 0 {
_categories = append(_categories, categoriesAndProduct.Categories...)
}
}
return _categories, nil
}
func (a *Api) GetParentCategories() ([]model.Category, error) {
if len(_parentCategories) > 0 {
return _parentCategories, nil
}
apiResponse, err := a.Client.HTTPClient.R().SetResult(&model.CategoryResponse{}).Get("client/catalog")
if err != nil {
return nil, err
}
if apiResponse.StatusCode() != 200 {
return nil, errors.New("failed to get categories")
}
result := apiResponse.Result().(*model.CategoryResponse).Categories
if len(result) == 0 {
return nil, errors.New("no categories found")
}
_parentCategories = result
return _parentCategories, nil
}
func (a *Api) GetCategoriesAndProductsBySlugParentCategory(slug string) (*model.CategoriesAndProductsBySlugParentCategoryResponse, error) {
apiResponse, err := a.Client.HTTPClient.
R().
SetResult(&model.CategoriesAndProductsBySlugParentCategoryResponse{}).
Get("client/category/" + slug + "/json")
if err != nil {
return nil, err
}
if apiResponse.StatusCode() != 200 {
return nil, errors.New("failed to get categories and products")
}
return apiResponse.Result().(*model.CategoriesAndProductsBySlugParentCategoryResponse), nil
}
func (a *Api) GetTreeCategories() ([]model.TreeCategories, error) {
if len(_treeCategories) > 0 {
return _treeCategories, nil
}
tree := map[string]interface{}{}
categories, err := a.GetCategories()
if err != nil {
return nil, err
}
utils.ConvertListToNestedDict(categories, tree)
_treeCategories = utils.ConvertToNestedList(tree)
return _treeCategories, nil
}