85 lines
2.3 KiB
Go
85 lines
2.3 KiB
Go
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
|
|
}
|