feat: setup editable product struct

This commit is contained in:
Daniel Goc
2026-04-17 11:46:34 +02:00
parent 931840c243
commit 7731c2f126
6 changed files with 152 additions and 1 deletions

View File

@@ -22,7 +22,6 @@ type ProductsHandler struct {
config *config.Config
}
// NewListProductsHandler creates a new ListProductsHandler instance
func NewProductsHandler() *ProductsHandler {
productService := productService.New()
return &ProductsHandler{

View File

@@ -0,0 +1,85 @@
package restricted
import (
"strconv"
"git.ma-al.com/goc_daniel/b2b/app/model"
"git.ma-al.com/goc_daniel/b2b/app/service/productEditingService"
"git.ma-al.com/goc_daniel/b2b/app/utils/i18n"
"git.ma-al.com/goc_daniel/b2b/app/utils/logger"
"git.ma-al.com/goc_daniel/b2b/app/utils/nullable"
"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"
)
type ProductEditingHandler struct {
productEditingService *productEditingService.ProductEditingService
}
func NewProductEditingHandler() *ProductEditingHandler {
productEditingService := productEditingService.New()
return &ProductEditingHandler{
productEditingService: productEditingService,
}
}
func ProductEditingHandlerRoutes(r fiber.Router) fiber.Router {
handler := NewProductEditingHandler()
r.Get("/:id", handler.GetProduct)
r.Post("/:id", handler.SaveProduct)
return r
}
func (h *ProductEditingHandler) GetProduct(c fiber.Ctx) error {
idStr := c.Params("id")
p_id_product, err := strconv.Atoi(idStr)
if err != nil {
return c.Status(responseErrors.GetErrorStatus(err)).
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, err)))
}
product, err := h.productEditingService.GetProduct(uint(p_id_product))
if err != nil {
logger.Error("failed to load editable product",
"product_id", p_id_product,
"error", err.Error(),
)
return c.Status(responseErrors.GetErrorStatus(err)).
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, err)))
}
return c.JSON(response.Make(product, 1, i18n.T_(c, response.Message_OK)))
}
func (h *ProductEditingHandler) SaveProduct(c fiber.Ctx) error {
idStr := c.Params("id")
p_id_product, err := strconv.Atoi(idStr)
if err != nil {
return c.Status(responseErrors.GetErrorStatus(err)).
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, err)))
}
var product model.ProductEditing
err = c.Bind().Body(&product)
if err != nil {
return c.Status(responseErrors.GetErrorStatus(responseErrors.ErrJSONBody)).
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, responseErrors.ErrJSONBody)))
}
err = h.productEditingService.SaveProduct(uint(p_id_product), &product)
if err != nil {
logger.Error("failed to save editable product",
"product_id", p_id_product,
"error", err.Error(),
)
return c.Status(responseErrors.GetErrorStatus(err)).
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, err)))
}
return c.JSON(response.Make(nullable.GetNil(""), 0, i18n.T_(c, response.Message_OK)))
}

View File

@@ -116,6 +116,10 @@ func (s *Server) Setup() error {
product := s.restricted.Group("/product")
restricted.ProductsHandlerRoutes(product)
// editing products
productEditing := s.restricted.Group("/product-editing")
restricted.ProductEditingHandlerRoutes(productEditing)
// locale selector (restricted)
// this is basically for changing user's selected language and country
localeSelector := s.restricted.Group("/langs-and-countries")