71 lines
1.5 KiB
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,
|
|
))
|
|
}
|