package server import ( "fmt" "github.com/gofiber/fiber/v2" "github.com/google/uuid" def "git.ego.cloudns.be/egommerce/api-entities/http" "git.ego.cloudns.be/egommerce/catalog-service/internal/service" "git.ego.cloudns.be/egommerce/catalog-service/internal/ui" ) func (s *Server) GetProductListHandler(c *fiber.Ctx) error { reqID, _ := s.GetRequestID(c) req := new(def.GetProductListRequest) catalogSrv := service.NewCatalogService(s.GetDatabase(), s.GetEventBus(), s.GetLogger()) res, err := ui.GetProductList(catalogSrv, req.CategoryID, reqID) if err != nil { return err } return c.JSON(res) } func (s *Server) AddProductToBasketHandler(c *fiber.Ctx) error { reqID, _ := s.GetRequestID(c) req := new(def.AddProductToBasketRequest) if err := c.BodyParser(req); err != nil { return s.Error(c, 400, err.Error()) } basketID := prepareBasket(c) qty := 1 if req.Quantity != 0 { qty = req.Quantity } catalogSrv := service.NewCatalogService(s.GetDatabase(), s.GetEventBus(), s.GetLogger()) res, err := ui.AddProductToBasket(catalogSrv, req.ProductID, qty, basketID, reqID) if err != nil { s.GetLogger().Log("AddProductToBasketHandler error: ", err) if res.ProductID == 0 { return s.Error(c, 404, fmt.Sprintf("Product #%d not exists", req.ProductID)) } return s.Error(c, 400, "Failed to add product to basket") } return c.JSON(res) } func (s *Server) RemoveProductFromBasketHandler(c *fiber.Ctx) error { reqID, _ := s.GetRequestID(c) req := new(def.RemoveProductFromBasketRequest) if err := c.BodyParser(req); err != nil { return s.Error(c, 400, err.Error()) } basketID := prepareBasket(c) qty := 1 if req.Quantity != 0 { qty = req.Quantity } catalogSrv := service.NewCatalogService(s.GetDatabase(), s.GetEventBus(), s.GetLogger()) res, err := ui.RemoveProductFromBasket(catalogSrv, req.ProductID, qty, basketID, reqID) if err != nil { s.GetLogger().Log("RemoveProductFromBasketHandler error: ", err) return s.Error(c, 400, "Failed to remove product from basket") } return c.JSON(res) } func prepareBasket(c *fiber.Ctx) string { basketID := c.Cookies(service.BasketIdCookieName) if len(basketID) == 0 { basketID = uuid.New().String() c.Cookie(&fiber.Cookie{Name: service.BasketIdCookieName, Value: basketID}) } return basketID }