100 lines
3.3 KiB
Go
100 lines
3.3 KiB
Go
package restricted
|
|
|
|
import (
|
|
"git.ma-al.com/goc_daniel/b2b/app/config"
|
|
"git.ma-al.com/goc_daniel/b2b/app/model"
|
|
"git.ma-al.com/goc_daniel/b2b/app/service/listService"
|
|
"git.ma-al.com/goc_daniel/b2b/app/utils/i18n"
|
|
"git.ma-al.com/goc_daniel/b2b/app/utils/localeExtractor"
|
|
"git.ma-al.com/goc_daniel/b2b/app/utils/nullable"
|
|
"git.ma-al.com/goc_daniel/b2b/app/utils/query/query_params"
|
|
"git.ma-al.com/goc_daniel/b2b/app/utils/response"
|
|
"git.ma-al.com/goc_daniel/b2b/app/utils/responseErrors"
|
|
"github.com/gofiber/fiber/v3"
|
|
)
|
|
|
|
// ListHandler handles endpoints that list various things (e.g. products or users)
|
|
type ListHandler struct {
|
|
listService *listService.ListService
|
|
config *config.Config
|
|
}
|
|
|
|
// NewListHandler creates a new ListHandler instance
|
|
func NewListHandler() *ListHandler {
|
|
listService := listService.New()
|
|
return &ListHandler{
|
|
listService: listService,
|
|
config: config.Get(),
|
|
}
|
|
}
|
|
|
|
func ListHandlerRoutes(r fiber.Router) fiber.Router {
|
|
handler := NewListHandler()
|
|
|
|
r.Get("/list-products", handler.ListProducts)
|
|
r.Get("/list-users", handler.ListUsers)
|
|
|
|
return r
|
|
}
|
|
|
|
func (h *ListHandler) ListProducts(c fiber.Ctx) error {
|
|
paging, filters, err := query_params.ParseFilters[model.Product](c, columnMappingListProducts)
|
|
if err != nil {
|
|
return c.Status(responseErrors.GetErrorStatus(err)).
|
|
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, err)))
|
|
}
|
|
|
|
id_lang, ok := localeExtractor.GetLangID(c)
|
|
if !ok {
|
|
return c.Status(responseErrors.GetErrorStatus(responseErrors.ErrBadAttribute)).
|
|
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, responseErrors.ErrBadAttribute)))
|
|
}
|
|
|
|
list, err := h.listService.ListProducts(id_lang, paging, filters)
|
|
if err != nil {
|
|
return c.Status(responseErrors.GetErrorStatus(err)).
|
|
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, err)))
|
|
}
|
|
|
|
return c.JSON(response.Make(&list.Items, int(list.Count), i18n.T_(c, response.Message_OK)))
|
|
}
|
|
|
|
var columnMappingListProducts map[string]string = map[string]string{
|
|
"product_id": "ps.id_product",
|
|
"name": "pl.name",
|
|
"reference": "p.reference",
|
|
"category_name": "cl.name",
|
|
"category_id": "cp.id_category",
|
|
"quantity": "sa.quantity",
|
|
}
|
|
|
|
func (h *ListHandler) ListUsers(c fiber.Ctx) error {
|
|
paging, filters, err := query_params.ParseFilters[model.Customer](c, columnMappingListUsers)
|
|
if err != nil {
|
|
return c.Status(responseErrors.GetErrorStatus(err)).
|
|
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, err)))
|
|
}
|
|
|
|
id_lang, ok := localeExtractor.GetLangID(c)
|
|
if !ok {
|
|
return c.Status(responseErrors.GetErrorStatus(responseErrors.ErrBadAttribute)).
|
|
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, responseErrors.ErrBadAttribute)))
|
|
}
|
|
|
|
list, err := h.listService.ListUsers(id_lang, paging, filters)
|
|
if err != nil {
|
|
return c.Status(responseErrors.GetErrorStatus(err)).
|
|
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, err)))
|
|
}
|
|
|
|
return c.JSON(response.Make(&list.Items, int(list.Count), i18n.T_(c, response.Message_OK)))
|
|
}
|
|
|
|
var columnMappingListUsers map[string]string = map[string]string{
|
|
"user_id": "users.id",
|
|
"email": "users.email",
|
|
"first_name": "users.first_name",
|
|
"second_name": "users.second_name",
|
|
"role": "users.role",
|
|
}
|