77 lines
2.1 KiB
Go
77 lines
2.1 KiB
Go
package handler
|
|
|
|
import (
|
|
"strconv"
|
|
|
|
"github.com/gofiber/fiber/v2"
|
|
"github.com/pahmiudahgede/senggoldong/dto"
|
|
"github.com/pahmiudahgede/senggoldong/internal/services"
|
|
"github.com/pahmiudahgede/senggoldong/utils"
|
|
)
|
|
|
|
type ArticleHandler struct {
|
|
ArticleService services.ArticleService
|
|
}
|
|
|
|
func NewArticleHandler(articleService services.ArticleService) *ArticleHandler {
|
|
return &ArticleHandler{ArticleService: articleService}
|
|
}
|
|
|
|
func (h *ArticleHandler) CreateArticle(c *fiber.Ctx) error {
|
|
var requestArticleDTO dto.RequestArticleDTO
|
|
if err := c.BodyParser(&requestArticleDTO); err != nil {
|
|
return utils.ValidationErrorResponse(c, map[string][]string{"body": {"Invalid body"}})
|
|
}
|
|
|
|
errors, valid := requestArticleDTO.Validate()
|
|
if !valid {
|
|
return utils.ValidationErrorResponse(c, errors)
|
|
}
|
|
|
|
articleResponse, err := h.ArticleService.CreateArticle(requestArticleDTO)
|
|
if err != nil {
|
|
return utils.GenericErrorResponse(c, fiber.StatusBadRequest, err.Error())
|
|
}
|
|
|
|
return utils.CreateResponse(c, articleResponse, "Article created successfully")
|
|
}
|
|
|
|
func (h *ArticleHandler) GetAllArticles(c *fiber.Ctx) error {
|
|
|
|
page, err := strconv.Atoi(c.Query("page", "0"))
|
|
if err != nil {
|
|
page = 0
|
|
}
|
|
limit, err := strconv.Atoi(c.Query("limit", "0"))
|
|
if err != nil {
|
|
limit = 0
|
|
}
|
|
|
|
article, totalArticle, err := h.ArticleService.GetAllArticles(page, limit)
|
|
if err != nil {
|
|
return utils.GenericErrorResponse(c, fiber.StatusInternalServerError, "Failed to fetch article")
|
|
}
|
|
|
|
if page > 0 && limit > 0 {
|
|
return utils.PaginatedResponse(c, article, page, limit, totalArticle, "Article fetched successfully")
|
|
}
|
|
|
|
return utils.NonPaginatedResponse(c, article, totalArticle, "Article fetched successfully")
|
|
|
|
}
|
|
|
|
func (h *ArticleHandler) GetArticleByID(c *fiber.Ctx) error {
|
|
|
|
id := c.Params("article_id")
|
|
if id == "" {
|
|
return utils.GenericErrorResponse(c, fiber.StatusBadRequest, "Article ID is required")
|
|
}
|
|
|
|
article, err := h.ArticleService.GetArticleByID(id)
|
|
if err != nil {
|
|
return utils.GenericErrorResponse(c, fiber.StatusNotFound, err.Error())
|
|
}
|
|
|
|
return utils.SuccessResponse(c, article, "Article fetched successfully")
|
|
}
|