feat: add feature banner API (still get method)
This commit is contained in:
parent
fec1ec8e36
commit
f2934658ae
|
@ -60,6 +60,7 @@ func InitDatabase() {
|
||||||
&domain.Article{},
|
&domain.Article{},
|
||||||
&domain.TrashCategory{},
|
&domain.TrashCategory{},
|
||||||
&domain.TrashDetail{},
|
&domain.TrashDetail{},
|
||||||
|
&domain.Banner{},
|
||||||
)
|
)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatal("Error: Failed to auto migrate domain:", err)
|
log.Fatal("Error: Failed to auto migrate domain:", err)
|
||||||
|
|
|
@ -0,0 +1,11 @@
|
||||||
|
package domain
|
||||||
|
|
||||||
|
import "time"
|
||||||
|
|
||||||
|
type Banner struct {
|
||||||
|
ID string `gorm:"primaryKey;type:uuid;default:uuid_generate_v4()" json:"id"`
|
||||||
|
BannerName string `gorm:"not null" json:"bannername"`
|
||||||
|
BannerImage string `gorm:"not null" json:"bannerimage"`
|
||||||
|
CreatedAt time.Time `gorm:"default:current_timestamp" json:"createdAt"`
|
||||||
|
UpdatedAt time.Time `gorm:"default:current_timestamp" json:"updatedAt"`
|
||||||
|
}
|
|
@ -0,0 +1,38 @@
|
||||||
|
package dto
|
||||||
|
|
||||||
|
import "github.com/go-playground/validator/v10"
|
||||||
|
|
||||||
|
type BannerResponse struct {
|
||||||
|
ID string `json:"id"`
|
||||||
|
BannerName string `json:"bannername"`
|
||||||
|
BannerImage string `json:"bannerimage"`
|
||||||
|
CreatedAt string `json:"createdAt"`
|
||||||
|
UpdatedAt string `json:"updatedAt"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewBannerResponse(id, bannerName, bannerImage, createdAt, updatedAt string) BannerResponse {
|
||||||
|
return BannerResponse{
|
||||||
|
ID: id,
|
||||||
|
BannerName: bannerName,
|
||||||
|
BannerImage: bannerImage,
|
||||||
|
CreatedAt: createdAt,
|
||||||
|
UpdatedAt: updatedAt,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
type BannerRequest struct {
|
||||||
|
BannerName string `json:"bannername" validate:"required"`
|
||||||
|
BannerImage string `json:"bannerimage" validate:"required,url"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewBannerRequest(bannerName, bannerImage string) BannerRequest {
|
||||||
|
return BannerRequest{
|
||||||
|
BannerName: bannerName,
|
||||||
|
BannerImage: bannerImage,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (b *BannerRequest) Validate() error {
|
||||||
|
validate := validator.New()
|
||||||
|
return validate.Struct(b)
|
||||||
|
}
|
|
@ -48,4 +48,8 @@ func AppRouter(app *fiber.App) {
|
||||||
app.Put("/updatetrash-detail/:id", controllers.UpdateTrashDetail)
|
app.Put("/updatetrash-detail/:id", controllers.UpdateTrashDetail)
|
||||||
app.Delete("/deletetrash-category/:id", controllers.DeleteTrashCategory)
|
app.Delete("/deletetrash-category/:id", controllers.DeleteTrashCategory)
|
||||||
app.Delete("/deletetrash-detail/:id", controllers.DeleteTrashDetail)
|
app.Delete("/deletetrash-detail/:id", controllers.DeleteTrashDetail)
|
||||||
|
|
||||||
|
// # banner
|
||||||
|
app.Get("/banners", controllers.GetBanners)
|
||||||
|
app.Get("/banners/:id", controllers.GetBannerByID)
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,83 @@
|
||||||
|
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 GetBanners(c *fiber.Ctx) error {
|
||||||
|
|
||||||
|
banners, err := services.GetBanners()
|
||||||
|
if err != nil {
|
||||||
|
|
||||||
|
return c.Status(fiber.StatusInternalServerError).JSON(utils.FormatResponse(
|
||||||
|
fiber.StatusInternalServerError,
|
||||||
|
"Failed to fetch banners",
|
||||||
|
nil,
|
||||||
|
))
|
||||||
|
}
|
||||||
|
|
||||||
|
var bannerResponses []dto.BannerResponse
|
||||||
|
for _, banner := range banners {
|
||||||
|
|
||||||
|
bannerResponses = append(bannerResponses, dto.BannerResponse{
|
||||||
|
ID: banner.ID,
|
||||||
|
BannerName: banner.BannerName,
|
||||||
|
BannerImage: banner.BannerImage,
|
||||||
|
CreatedAt: utils.FormatDateToIndonesianFormat(banner.CreatedAt),
|
||||||
|
UpdatedAt: utils.FormatDateToIndonesianFormat(banner.UpdatedAt),
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
return c.Status(fiber.StatusOK).JSON(utils.FormatResponse(
|
||||||
|
fiber.StatusOK,
|
||||||
|
"Banners fetched successfully",
|
||||||
|
struct {
|
||||||
|
Banners []dto.BannerResponse `json:"banners"`
|
||||||
|
}{
|
||||||
|
Banners: bannerResponses,
|
||||||
|
},
|
||||||
|
))
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetBannerByID(c *fiber.Ctx) error {
|
||||||
|
id := c.Params("id")
|
||||||
|
|
||||||
|
banner, err := services.GetBannerByID(id)
|
||||||
|
if err != nil {
|
||||||
|
|
||||||
|
if err.Error() == "banner not found" {
|
||||||
|
return c.Status(fiber.StatusNotFound).JSON(utils.FormatResponse(
|
||||||
|
fiber.StatusNotFound,
|
||||||
|
"Banner not found",
|
||||||
|
nil,
|
||||||
|
))
|
||||||
|
}
|
||||||
|
|
||||||
|
return c.Status(fiber.StatusInternalServerError).JSON(utils.FormatResponse(
|
||||||
|
fiber.StatusInternalServerError,
|
||||||
|
"Failed to fetch banner",
|
||||||
|
nil,
|
||||||
|
))
|
||||||
|
}
|
||||||
|
|
||||||
|
bannerResponse := dto.BannerResponse{
|
||||||
|
ID: banner.ID,
|
||||||
|
BannerName: banner.BannerName,
|
||||||
|
BannerImage: banner.BannerImage,
|
||||||
|
CreatedAt: utils.FormatDateToIndonesianFormat(banner.CreatedAt),
|
||||||
|
UpdatedAt: utils.FormatDateToIndonesianFormat(banner.UpdatedAt),
|
||||||
|
}
|
||||||
|
|
||||||
|
return c.Status(fiber.StatusOK).JSON(utils.FormatResponse(
|
||||||
|
fiber.StatusOK,
|
||||||
|
"Banner fetched successfully",
|
||||||
|
struct {
|
||||||
|
Banner dto.BannerResponse `json:"banner"`
|
||||||
|
}{
|
||||||
|
Banner: bannerResponse,
|
||||||
|
},
|
||||||
|
))
|
||||||
|
}
|
|
@ -0,0 +1,24 @@
|
||||||
|
package repositories
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/pahmiudahgede/senggoldong/config"
|
||||||
|
"github.com/pahmiudahgede/senggoldong/domain"
|
||||||
|
)
|
||||||
|
|
||||||
|
func GetBanners() ([]domain.Banner, error) {
|
||||||
|
var banners []domain.Banner
|
||||||
|
|
||||||
|
if err := config.DB.Find(&banners).Error; err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return banners, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetBannerByID(id string) (domain.Banner, error) {
|
||||||
|
var banner domain.Banner
|
||||||
|
|
||||||
|
if err := config.DB.Where("id = ?", id).First(&banner).Error; err != nil {
|
||||||
|
return banner, err
|
||||||
|
}
|
||||||
|
return banner, nil
|
||||||
|
}
|
|
@ -0,0 +1,21 @@
|
||||||
|
package services
|
||||||
|
|
||||||
|
import (
|
||||||
|
"errors"
|
||||||
|
|
||||||
|
"github.com/pahmiudahgede/senggoldong/domain"
|
||||||
|
"github.com/pahmiudahgede/senggoldong/internal/repositories"
|
||||||
|
)
|
||||||
|
|
||||||
|
func GetBanners() ([]domain.Banner, error) {
|
||||||
|
return repositories.GetBanners()
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetBannerByID(id string) (domain.Banner, error) {
|
||||||
|
banner, err := repositories.GetBannerByID(id)
|
||||||
|
if err != nil {
|
||||||
|
|
||||||
|
return domain.Banner{}, errors.New("banner not found")
|
||||||
|
}
|
||||||
|
return banner, nil
|
||||||
|
}
|
Loading…
Reference in New Issue