feat: add feature delete article for role administrator

This commit is contained in:
pahmiudahgede 2025-02-15 03:00:05 +07:00
parent fc38a43050
commit e748c6f492
4 changed files with 44 additions and 0 deletions

View File

@ -113,3 +113,17 @@ func (h *ArticleHandler) UpdateArticle(c *fiber.Ctx) error {
return utils.SuccessResponse(c, articleResponse, "Article updated successfully")
}
func (h *ArticleHandler) DeleteArticle(c *fiber.Ctx) error {
id := c.Params("article_id")
if id == "" {
return utils.GenericResponse(c, fiber.StatusBadRequest, "Article ID is required")
}
err := h.ArticleService.DeleteArticle(id)
if err != nil {
return utils.GenericResponse(c, fiber.StatusInternalServerError, err.Error())
}
return utils.GenericResponse(c, fiber.StatusOK, "Article deleted successfully")
}

View File

@ -12,6 +12,7 @@ type ArticleRepository interface {
FindArticleByID(id string) (*model.Article, error)
FindAllArticles(page, limit int) ([]model.Article, int, error)
UpdateArticle(id string, article *model.Article) error
DeleteArticle(id string) error
}
type articleRepository struct {
@ -66,3 +67,8 @@ func (r *articleRepository) FindAllArticles(page, limit int) ([]model.Article, i
func (r *articleRepository) UpdateArticle(id string, article *model.Article) error {
return r.DB.Model(&model.Article{}).Where("id = ?", id).Updates(article).Error
}
func (r *articleRepository) DeleteArticle(id string) error {
result := r.DB.Delete(&model.Article{}, "id = ?", id)
return result.Error
}

View File

@ -20,6 +20,7 @@ type ArticleService interface {
GetAllArticles(page, limit int) ([]dto.ArticleResponseDTO, int, error)
GetArticleByID(id string) (*dto.ArticleResponseDTO, error)
UpdateArticle(id string, request dto.RequestArticleDTO, coverImage *multipart.FileHeader) (*dto.ArticleResponseDTO, error)
DeleteArticle(id string) error
}
type articleService struct {
@ -371,3 +372,25 @@ func (s *articleService) saveCoverImage(coverImage *multipart.FileHeader) (strin
return coverImagePath, nil
}
func (s *articleService) DeleteArticle(id string) error {
err := s.ArticleRepo.DeleteArticle(id)
if err != nil {
return fmt.Errorf("failed to delete article: %v", err)
}
articleCacheKey := fmt.Sprintf("article:%s", id)
err = utils.DeleteData(articleCacheKey)
if err != nil {
fmt.Printf("Error deleting cache for article: %v\n", err)
}
articlesCacheKey := "articles:all"
err = utils.DeleteData(articlesCacheKey)
if err != nil {
fmt.Printf("Error deleting cache for all articles: %v\n", err)
}
return nil
}

View File

@ -21,4 +21,5 @@ func ArticleRouter(api fiber.Router) {
articleAPI.Get("/view-article", articleHandler.GetAllArticles)
articleAPI.Get("/view-article/:article_id", articleHandler.GetArticleByID)
articleAPI.Put("/update-article/:article_id", middleware.AuthMiddleware, middleware.RoleMiddleware(utils.RoleAdministrator), articleHandler.UpdateArticle)
articleAPI.Delete("/delete-article/:article_id", middleware.AuthMiddleware, middleware.RoleMiddleware(utils.RoleAdministrator), articleHandler.DeleteArticle)
}