diff --git a/src/main/java/com/io/realworld/domain/aggregate/article/controller/ArticleController.java b/src/main/java/com/io/realworld/domain/aggregate/article/controller/ArticleController.java index ee43d92..ebf740f 100644 --- a/src/main/java/com/io/realworld/domain/aggregate/article/controller/ArticleController.java +++ b/src/main/java/com/io/realworld/domain/aggregate/article/controller/ArticleController.java @@ -52,4 +52,9 @@ public class ArticleController { public ArticleResponse favoriteArticle(@AuthenticationPrincipal UserAuth userAuth, @PathVariable("slug") String slug){ return articleService.favoriteArticle(userAuth, slug); } + + @DeleteMapping("/{slug}/favorite") + public ArticleResponse unFavoriteArticle(@AuthenticationPrincipal UserAuth userAuth, @PathVariable("slug") String slug){ + return articleService.unFavoriteArticle(userAuth, slug); + } } diff --git a/src/main/java/com/io/realworld/domain/aggregate/article/service/ArticleService.java b/src/main/java/com/io/realworld/domain/aggregate/article/service/ArticleService.java index cbdb912..3689dd2 100644 --- a/src/main/java/com/io/realworld/domain/aggregate/article/service/ArticleService.java +++ b/src/main/java/com/io/realworld/domain/aggregate/article/service/ArticleService.java @@ -21,4 +21,6 @@ public interface ArticleService { void deleteArticle(UserAuth userAuth, String slug); ArticleResponse favoriteArticle(UserAuth userAuth, String slug); + + ArticleResponse unFavoriteArticle(UserAuth userAuth, String slug); } diff --git a/src/main/java/com/io/realworld/domain/aggregate/article/service/ArticleServiceImpl.java b/src/main/java/com/io/realworld/domain/aggregate/article/service/ArticleServiceImpl.java index e377933..9f268c4 100644 --- a/src/main/java/com/io/realworld/domain/aggregate/article/service/ArticleServiceImpl.java +++ b/src/main/java/com/io/realworld/domain/aggregate/article/service/ArticleServiceImpl.java @@ -122,6 +122,25 @@ public class ArticleServiceImpl implements ArticleService { } + @Override + public ArticleResponse unFavoriteArticle(UserAuth userAuth, String slug) { + Optional
article = articleRepository.findAll().stream().filter(findArticle -> + findArticle.getSlug().equals(slug)).findAny(); + Optional user = userRepository.findById(userAuth.getId()); + if(article.isEmpty()){ + throw new CustomException(Error.ARTICLE_NOT_FOUND); + } + if(user.isEmpty()){ + throw new CustomException(Error.USER_NOT_FOUND); + } + + Favorite favorite = favoriteRepository.findByArticleIdAndUserId(article.get().getId(), userAuth.getId()).orElseThrow(() -> { + throw new CustomException(Error.ALREADY_UN_FAVORITE_ARTICLE); + }); + favoriteRepository.delete(favorite); + return convertDtoWithUser(article.get(),userAuth); + } + private String initSlug(String title) { return title.toLowerCase().replace(' ', '-'); } diff --git a/src/main/java/com/io/realworld/exception/Error.java b/src/main/java/com/io/realworld/exception/Error.java index ccf4f76..c6bc23a 100644 --- a/src/main/java/com/io/realworld/exception/Error.java +++ b/src/main/java/com/io/realworld/exception/Error.java @@ -12,7 +12,8 @@ public enum Error { ALREADY_FOLLOW("already follow",HttpStatus.UNPROCESSABLE_ENTITY), ALREADY_UNFOLLOW("already unfollow",HttpStatus.UNPROCESSABLE_ENTITY), ARTICLE_NOT_FOUND("article not found check your slug", HttpStatus.NOT_FOUND), - ALREADY_FAVORITE_ARTICLE("already favorite Aritlce", HttpStatus.UNPROCESSABLE_ENTITY); + ALREADY_FAVORITE_ARTICLE("already favorite Article", HttpStatus.UNPROCESSABLE_ENTITY), + ALREADY_UN_FAVORITE_ARTICLE("already unfavorite Article", HttpStatus.UNPROCESSABLE_ENTITY); private final String message;