97 lines
2.6 KiB
Go
97 lines
2.6 KiB
Go
package handler
|
|
|
|
import (
|
|
"rijig/dto"
|
|
"rijig/internal/services"
|
|
"rijig/utils"
|
|
|
|
"github.com/gofiber/fiber/v2"
|
|
)
|
|
|
|
type CartHandler struct {
|
|
Service *services.CartService
|
|
}
|
|
|
|
func NewCartHandler(service *services.CartService) *CartHandler {
|
|
return &CartHandler{Service: service}
|
|
}
|
|
|
|
func (h *CartHandler) AddOrUpdateCartItem(c *fiber.Ctx) error {
|
|
var body dto.BulkRequestCartItems
|
|
if err := c.BodyParser(&body); err != nil {
|
|
return utils.ValidationErrorResponse(c, map[string][]string{
|
|
"body": {"Invalid JSON body"},
|
|
})
|
|
}
|
|
|
|
if errors, ok := body.Validate(); !ok {
|
|
return utils.ValidationErrorResponse(c, errors)
|
|
}
|
|
|
|
userID := c.Locals("userID").(string)
|
|
for _, item := range body.Items {
|
|
if err := services.AddOrUpdateCartItem(userID, item); err != nil {
|
|
return utils.InternalServerErrorResponse(c, "Failed to update one or more items")
|
|
}
|
|
}
|
|
|
|
return utils.SuccessResponse(c, nil, "Cart updated successfully")
|
|
}
|
|
|
|
func (h *CartHandler) DeleteCartItem(c *fiber.Ctx) error {
|
|
trashID := c.Params("trashid")
|
|
userID := c.Locals("userID").(string)
|
|
|
|
err := services.DeleteCartItem(userID, trashID)
|
|
if err != nil {
|
|
if err.Error() == "no cart found" || err.Error() == "trashid not found" {
|
|
return utils.GenericResponse(c, fiber.StatusNotFound, "Trash item not found in cart")
|
|
}
|
|
return utils.InternalServerErrorResponse(c, "Failed to delete item")
|
|
}
|
|
|
|
return utils.SuccessResponse(c, nil, "Item deleted")
|
|
}
|
|
|
|
func (h *CartHandler) ClearCart(c *fiber.Ctx) error {
|
|
userID := c.Locals("userID").(string)
|
|
if err := services.ClearCart(userID); err != nil {
|
|
return utils.InternalServerErrorResponse(c, "Failed to clear cart")
|
|
}
|
|
return utils.SuccessResponse(c, nil, "Cart cleared")
|
|
}
|
|
|
|
func (h *CartHandler) GetCart(c *fiber.Ctx) error {
|
|
userID := c.Locals("userID").(string)
|
|
|
|
cart, err := h.Service.GetCart(userID)
|
|
if err != nil {
|
|
return utils.InternalServerErrorResponse(c, "Failed to fetch cart")
|
|
}
|
|
|
|
return utils.SuccessResponse(c, cart, "User cart data successfully fetched")
|
|
}
|
|
|
|
func (h *CartHandler) CommitCart(c *fiber.Ctx) error {
|
|
userID := c.Locals("userID").(string)
|
|
|
|
err := h.Service.CommitCartToDatabase(userID)
|
|
if err != nil {
|
|
return utils.InternalServerErrorResponse(c, "Failed to commit cart to database")
|
|
}
|
|
|
|
return utils.SuccessResponse(c, nil, "Cart committed to database")
|
|
}
|
|
|
|
// PUT /cart/refresh → refresh TTL Redis
|
|
func (h *CartHandler) RefreshCartTTL(c *fiber.Ctx) error {
|
|
userID := c.Locals("userID").(string)
|
|
|
|
err := services.RefreshCartTTL(userID)
|
|
if err != nil {
|
|
return utils.InternalServerErrorResponse(c, "Failed to refresh cart TTL")
|
|
}
|
|
|
|
return utils.SuccessResponse(c, nil, "Cart TTL refreshed")
|
|
}
|