MIF_E31222379_BE/internal/controllers/product.go

71 lines
1.5 KiB
Go

package controllers
import (
"github.com/gofiber/fiber/v2"
"github.com/pahmiudahgede/senggoldong/dto"
"github.com/pahmiudahgede/senggoldong/internal/services"
"github.com/pahmiudahgede/senggoldong/utils"
)
func GetAllProducts(c *fiber.Ctx) error {
limit := c.QueryInt("limit", 0)
page := c.QueryInt("page", 1)
if limit < 0 || page <= 0 {
return c.Status(fiber.StatusBadRequest).JSON(utils.FormatResponse(
fiber.StatusBadRequest,
"Invalid pagination parameters",
nil,
))
}
var products []dto.ProductResponseDTO
var err error
if limit == 0 {
products, err = services.GetProducts(0, 0)
} else {
products, err = services.GetProducts(limit, page)
}
if err != nil {
return c.Status(fiber.StatusInternalServerError).JSON(utils.FormatResponse(
fiber.StatusInternalServerError,
"Failed to fetch products",
nil,
))
}
return c.Status(fiber.StatusOK).JSON(utils.FormatResponse(
fiber.StatusOK,
"Products fetched successfully",
products,
))
}
func GetProductByID(c *fiber.Ctx) error {
productID := c.Params("productid")
if productID == "" {
return c.Status(fiber.StatusBadRequest).JSON(utils.FormatResponse(
fiber.StatusBadRequest,
"Product ID is required",
nil,
))
}
product, err := services.GetProductByID(productID)
if err != nil {
return c.Status(fiber.StatusNotFound).JSON(utils.FormatResponse(
fiber.StatusNotFound,
"Product not found",
nil,
))
}
return c.Status(fiber.StatusOK).JSON(utils.FormatResponse(
fiber.StatusOK,
"Product fetched successfully",
product,
))
}