diff --git a/internal/api/routes.go b/internal/api/routes.go index 3e6d596..dffef7e 100644 --- a/internal/api/routes.go +++ b/internal/api/routes.go @@ -52,4 +52,5 @@ func AppRouter(app *fiber.App) { // # banner app.Get("/banners", controllers.GetBanners) app.Get("/banners/:id", controllers.GetBannerByID) + app.Post("/addbanners", controllers.CreateBanner) } diff --git a/internal/controllers/banner.go b/internal/controllers/banner.go index 8020142..9364651 100644 --- a/internal/controllers/banner.go +++ b/internal/controllers/banner.go @@ -81,3 +81,50 @@ func GetBannerByID(c *fiber.Ctx) error { }, )) } + +func CreateBanner(c *fiber.Ctx) error { + var bannerInput dto.BannerRequest + + if err := c.BodyParser(&bannerInput); err != nil { + return c.Status(fiber.StatusBadRequest).JSON(utils.FormatResponse( + fiber.StatusBadRequest, + "Invalid input data", + nil, + )) + } + + if err := bannerInput.Validate(); err != nil { + return c.Status(fiber.StatusBadRequest).JSON(utils.FormatResponse( + fiber.StatusBadRequest, + "Validation failed: "+err.Error(), + nil, + )) + } + + newBanner, err := services.CreateBanner(bannerInput.BannerName, bannerInput.BannerImage) + if err != nil { + return c.Status(fiber.StatusInternalServerError).JSON(utils.FormatResponse( + fiber.StatusInternalServerError, + "Failed to create banner", + nil, + )) + } + + bannerResponse := dto.NewBannerResponse( + newBanner.ID, + newBanner.BannerName, + newBanner.BannerImage, + utils.FormatDateToIndonesianFormat(newBanner.CreatedAt), + utils.FormatDateToIndonesianFormat(newBanner.UpdatedAt), + ) + + return c.Status(fiber.StatusCreated).JSON(utils.FormatResponse( + fiber.StatusCreated, + "Banner created successfully", + struct { + Banner dto.BannerResponse `json:"banner"` + }{ + Banner: bannerResponse, + }, + )) +} \ No newline at end of file diff --git a/internal/repositories/banner.go b/internal/repositories/banner.go index 88d5835..112cc91 100644 --- a/internal/repositories/banner.go +++ b/internal/repositories/banner.go @@ -22,3 +22,10 @@ func GetBannerByID(id string) (domain.Banner, error) { } return banner, nil } + +func CreateBanner(banner *domain.Banner) error { + if err := config.DB.Create(banner).Error; err != nil { + return err + } + return nil +} \ No newline at end of file diff --git a/internal/services/banner.go b/internal/services/banner.go index 39e2a34..550062f 100644 --- a/internal/services/banner.go +++ b/internal/services/banner.go @@ -19,3 +19,16 @@ func GetBannerByID(id string) (domain.Banner, error) { } return banner, nil } + +func CreateBanner(bannerName, bannerImage string) (domain.Banner, error) { + newBanner := domain.Banner{ + BannerName: bannerName, + BannerImage: bannerImage, + } + + if err := repositories.CreateBanner(&newBanner); err != nil { + return domain.Banner{}, err + } + + return newBanner, nil +} \ No newline at end of file