MIF_E31222379_BE/internal/controllers/banner.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,
))
}