129 lines
3.1 KiB
Go
129 lines
3.1 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"
|
|
)
|
|
|
|
type BannerController struct {
|
|
service *services.BannerService
|
|
}
|
|
|
|
func NewBannerController(service *services.BannerService) *BannerController {
|
|
return &BannerController{service: service}
|
|
}
|
|
|
|
func (bc *BannerController) GetAllBanners(c *fiber.Ctx) error {
|
|
banners, err := bc.service.GetAllBanners()
|
|
if err != nil {
|
|
return c.Status(fiber.StatusInternalServerError).JSON(utils.ErrorResponse(
|
|
fiber.StatusInternalServerError,
|
|
"Failed to fetch banners",
|
|
))
|
|
}
|
|
return c.Status(fiber.StatusOK).JSON(utils.FormatResponse(
|
|
fiber.StatusOK,
|
|
"Banners fetched successfully",
|
|
banners,
|
|
))
|
|
}
|
|
|
|
func (bc *BannerController) GetBannerByID(c *fiber.Ctx) error {
|
|
id := c.Params("id")
|
|
banner, err := bc.service.GetBannerByID(id)
|
|
if err != nil {
|
|
return c.Status(fiber.StatusNotFound).JSON(utils.ErrorResponse(
|
|
fiber.StatusNotFound,
|
|
"Banner not found",
|
|
))
|
|
}
|
|
return c.Status(fiber.StatusOK).JSON(utils.FormatResponse(
|
|
fiber.StatusOK,
|
|
"Banner fetched successfully",
|
|
banner,
|
|
))
|
|
}
|
|
|
|
func (bc *BannerController) CreateBanner(c *fiber.Ctx) error {
|
|
var request dto.BannerCreateRequest
|
|
|
|
if err := c.BodyParser(&request); err != nil {
|
|
return c.Status(fiber.StatusBadRequest).JSON(utils.ErrorResponse(
|
|
fiber.StatusBadRequest,
|
|
"Invalid request body",
|
|
))
|
|
}
|
|
|
|
banner, err := bc.service.CreateBanner(&request)
|
|
if err != nil {
|
|
return c.Status(fiber.StatusInternalServerError).JSON(utils.ErrorResponse(
|
|
fiber.StatusInternalServerError,
|
|
err.Error(),
|
|
))
|
|
}
|
|
|
|
return c.Status(fiber.StatusCreated).JSON(utils.FormatResponse(
|
|
fiber.StatusCreated,
|
|
"Banner created successfully",
|
|
banner,
|
|
))
|
|
}
|
|
|
|
func (bc *BannerController) UpdateBanner(c *fiber.Ctx) error {
|
|
id := c.Params("id")
|
|
var request dto.BannerUpdateRequest
|
|
|
|
if err := c.BodyParser(&request); err != nil {
|
|
return c.Status(fiber.StatusBadRequest).JSON(utils.ErrorResponse(
|
|
fiber.StatusBadRequest,
|
|
"Invalid request body",
|
|
))
|
|
}
|
|
|
|
banner, err := bc.service.UpdateBanner(id, &request)
|
|
if err != nil {
|
|
if err.Error() == "banner not found" {
|
|
return c.Status(fiber.StatusNotFound).JSON(utils.ErrorResponse(
|
|
fiber.StatusNotFound,
|
|
"Banner not found",
|
|
))
|
|
}
|
|
return c.Status(fiber.StatusInternalServerError).JSON(utils.ErrorResponse(
|
|
fiber.StatusInternalServerError,
|
|
err.Error(),
|
|
))
|
|
}
|
|
|
|
return c.Status(fiber.StatusOK).JSON(utils.FormatResponse(
|
|
fiber.StatusOK,
|
|
"Banner updated successfully",
|
|
banner,
|
|
))
|
|
}
|
|
|
|
func (bc *BannerController) DeleteBanner(c *fiber.Ctx) error {
|
|
id := c.Params("id")
|
|
|
|
err := bc.service.DeleteBanner(id)
|
|
if err != nil {
|
|
if err.Error() == "banner not found" {
|
|
return c.Status(fiber.StatusNotFound).JSON(utils.ErrorResponse(
|
|
fiber.StatusNotFound,
|
|
"Banner not found",
|
|
))
|
|
}
|
|
return c.Status(fiber.StatusInternalServerError).JSON(utils.ErrorResponse(
|
|
fiber.StatusInternalServerError,
|
|
err.Error(),
|
|
))
|
|
}
|
|
|
|
return c.Status(fiber.StatusOK).JSON(utils.FormatResponse(
|
|
fiber.StatusOK,
|
|
"Banner deleted successfully",
|
|
nil,
|
|
))
|
|
}
|