forked from ebhomengo/niki
refactor handler
This commit is contained in:
parent
f5a2a31dd0
commit
7df63bd36f
|
|
@ -34,3 +34,8 @@ type UpdateQuantityRequest struct {
|
|||
ItemID types.ID `json:"item_id"`
|
||||
Quantity int `json:"quantity"`
|
||||
}
|
||||
|
||||
type UpdateCartStatusRequest struct {
|
||||
CartID types.ID `json:"cart_id"`
|
||||
Status entity.CartStatus `json:"status"`
|
||||
}
|
||||
|
|
|
|||
|
|
@ -106,11 +106,11 @@ func (s Service) ClearCart(ctx context.Context, cartID, userID types.ID) error {
|
|||
return s.repo.DeleteCart(ctx, cartID, userID)
|
||||
}
|
||||
|
||||
func (s Service) UpdateCartStatus(ctx context.Context, cartID types.ID, status entity.CartStatus) error {
|
||||
func (s Service) UpdateCartStatus(ctx context.Context, req UpdateCartStatusRequest) error {
|
||||
const op = "shoppingbaskerapp.service.ClearCart"
|
||||
if !status.IsValid() {
|
||||
if !req.Status.IsValid() {
|
||||
return richerror.New(op).WithKind(richerror.KindInvalid).WithMessage("invalid status")
|
||||
}
|
||||
|
||||
return s.repo.UpdateStatus(ctx, cartID, status)
|
||||
return s.repo.UpdateStatus(ctx, req.CartID, req.Status)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -52,7 +52,21 @@ func (h Handler) GetCart(c echo.Context) error {
|
|||
func (h Handler) RemoveCart(c echo.Context) error {
|
||||
claims := claim.GetClaimsFromEchoContext(c)
|
||||
|
||||
if err := h.svc.ClearCart(c.Request().Context(), types.ID(claims.UserID)); err != nil {
|
||||
cartIDStr := c.Param("cart_id")
|
||||
if cartIDStr == "" {
|
||||
return c.JSON(http.StatusBadRequest, map[string]string{
|
||||
"error": "cart id required",
|
||||
})
|
||||
}
|
||||
|
||||
cartID, err := strconv.Atoi(cartIDStr)
|
||||
if err != nil || cartID < 1 {
|
||||
return c.JSON(http.StatusBadRequest, map[string]string{
|
||||
"error": "invalid cart id",
|
||||
})
|
||||
}
|
||||
|
||||
if err := h.svc.ClearCart(c.Request().Context(), types.ID(cartID), types.ID(claims.UserID)); err != nil {
|
||||
msg, code := httpmsg.Error(err)
|
||||
return c.JSON(code, msg)
|
||||
}
|
||||
|
|
@ -61,10 +75,28 @@ func (h Handler) RemoveCart(c echo.Context) error {
|
|||
}
|
||||
|
||||
func (h Handler) RemoveItem(c echo.Context) error {
|
||||
claims := claim.GetClaimsFromEchoContext(c)
|
||||
p := c.Param("productID")
|
||||
cartIDStr := c.Param("cart_id")
|
||||
itemIDStr := c.Param("item_id")
|
||||
|
||||
pID, err := strconv.Atoi(p)
|
||||
if cartIDStr == "" {
|
||||
return c.JSON(http.StatusBadRequest, echo.Map{
|
||||
"error": "cart id required",
|
||||
})
|
||||
}
|
||||
|
||||
cID, err := strconv.Atoi(cartIDStr)
|
||||
if err != nil {
|
||||
return c.JSON(http.StatusBadRequest, map[string]string{
|
||||
"error": "invalid product id",
|
||||
})
|
||||
}
|
||||
|
||||
if itemIDStr == "" {
|
||||
return c.JSON(http.StatusBadRequest, echo.Map{
|
||||
"error": "item id required",
|
||||
})
|
||||
}
|
||||
iID, err := strconv.Atoi(itemIDStr)
|
||||
if err != nil {
|
||||
return c.JSON(http.StatusBadRequest, map[string]string{
|
||||
"error": "invalid product id",
|
||||
|
|
@ -73,8 +105,8 @@ func (h Handler) RemoveItem(c echo.Context) error {
|
|||
|
||||
var req service.RemoveFromCartRequest
|
||||
|
||||
req.UserID = types.ID(claims.UserID)
|
||||
req.ProductID = types.ID(pID)
|
||||
req.CartID = types.ID(cID)
|
||||
req.ItemID = types.ID(iID)
|
||||
|
||||
if err := h.svc.RemoveFromCart(c.Request().Context(), req); err != nil {
|
||||
msg, code := httpmsg.Error(err)
|
||||
|
|
@ -85,28 +117,12 @@ func (h Handler) RemoveItem(c echo.Context) error {
|
|||
}
|
||||
|
||||
func (h Handler) UpdateQuantity(c echo.Context) error {
|
||||
claims := claim.GetClaimsFromEchoContext(c)
|
||||
p := c.Param("productID")
|
||||
|
||||
pID, err := strconv.Atoi(p)
|
||||
if err != nil {
|
||||
return c.JSON(http.StatusBadRequest, map[string]string{
|
||||
"error": "invalid product id",
|
||||
})
|
||||
}
|
||||
|
||||
qStr := c.Param("quantity")
|
||||
q, err := strconv.Atoi(qStr)
|
||||
if err != nil {
|
||||
return c.JSON(http.StatusBadRequest, map[string]string{
|
||||
"error": "invalid quantity",
|
||||
})
|
||||
}
|
||||
|
||||
var req service.UpdateQuantityRequest
|
||||
req.UserID = types.ID(claims.UserID)
|
||||
req.ProductID = types.ID(pID)
|
||||
req.Quantity = q
|
||||
if err := c.Bind(&req); err != nil {
|
||||
return c.JSON(http.StatusBadRequest, map[string]string{
|
||||
"error": "invalid request body",
|
||||
})
|
||||
}
|
||||
|
||||
if err := h.svc.UpdateQuantity(c.Request().Context(), req); err != nil {
|
||||
msg, code := httpmsg.Error(err)
|
||||
|
|
@ -115,3 +131,19 @@ func (h Handler) UpdateQuantity(c echo.Context) error {
|
|||
|
||||
return c.NoContent(http.StatusNoContent)
|
||||
}
|
||||
|
||||
func (h Handler) UpdateCartStatus(c echo.Context) error {
|
||||
var req service.UpdateCartStatusRequest
|
||||
if err := c.Bind(&req); err != nil {
|
||||
return c.JSON(http.StatusBadRequest, map[string]string{
|
||||
"error": "invalid request body",
|
||||
})
|
||||
}
|
||||
|
||||
if err := h.svc.UpdateCartStatus(c.Request().Context(), req); err != nil {
|
||||
msg, code := httpmsg.Error(err)
|
||||
return c.JSON(code, msg)
|
||||
}
|
||||
|
||||
return c.NoContent(http.StatusNoContent)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -33,12 +33,13 @@ func (s Server) registerRoutes() {
|
|||
|
||||
router.GET("shoppingbasket/health-check", s.healthCheck)
|
||||
|
||||
r := router.Group("shoppingbasket/cart") // Authentication is required
|
||||
r := router.Group("shoppingbasket/carts") // Authentication is required
|
||||
|
||||
r.GET("/", s.handler.GetCart)
|
||||
r.DELETE("/", s.handler.RemoveCart)
|
||||
r.DELETE("/:cart_id", s.handler.RemoveCart)
|
||||
r.PUT("/status", s.handler.UpdateCartStatus)
|
||||
|
||||
r.POST("/items", s.handler.AddToBasket)
|
||||
r.DELETE("/items/:productID", s.handler.RemoveItem)
|
||||
r.PUT("/items/:productID/:quantity", s.handler.UpdateQuantity)
|
||||
r.DELETE("/items/:cart_id/:item_id", s.handler.RemoveItem)
|
||||
r.PUT("/items/item-quantity", s.handler.UpdateQuantity)
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue