Files
hexagonal/src/main/java/myblog/blog/article/application/ArticleService.java
2022-03-23 23:43:40 +09:00

101 lines
4.0 KiB
Java

package myblog.blog.article.application;
import lombok.RequiredArgsConstructor;
import myblog.blog.article.application.port.request.ArticleCreateRequest;
import myblog.blog.article.application.port.request.ArticleEditRequest;
import myblog.blog.article.application.port.incomming.ArticleUseCase;
import myblog.blog.article.application.port.incomming.TagUseCase;
import myblog.blog.article.application.port.outgoing.ArticleBackupRepositoryPort;
import myblog.blog.article.application.port.outgoing.ArticleRepositoryPort;
import myblog.blog.article.domain.Article;
import myblog.blog.category.domain.Category;
import myblog.blog.member.doamin.Member;
import myblog.blog.category.service.CategoryService;
import myblog.blog.member.service.Oauth2MemberService;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
@Service
@Transactional
@RequiredArgsConstructor
public class ArticleService implements ArticleUseCase {
private final TagUseCase tagUseCase;
private final CategoryService categoryService;
private final Oauth2MemberService memberService;
private final ArticleRepositoryPort articleRepositoryPort;
private final ArticleBackupRepositoryPort articleBackupRepositoryPort;
@Override
@CacheEvict(value = {"layoutCaching", "layoutRecentArticleCaching","seoCaching"}, allEntries = true)
public Long writeArticle(ArticleCreateRequest articleCreateRequest) {
Member writer = memberService.findById(articleCreateRequest.getMemberId());
Category category = categoryService.findCategory(articleCreateRequest.getCategory());
Article newArticle = new Article(articleCreateRequest.getTitle(),
articleCreateRequest.getContent(),
articleCreateRequest.getToc(),
writer,
articleCreateRequest.getThumbnailUrl(),
category);
articleRepositoryPort.save(newArticle);
tagUseCase.createNewTagsAndArticleTagList(articleCreateRequest.getTags(), newArticle);
return newArticle.getId();
}
@Override
@CacheEvict(value = {"layoutCaching", "layoutRecentArticleCaching","seoCaching"}, allEntries = true)
public void editArticle(ArticleEditRequest articleEditRequest) {
Article article = articleRepositoryPort.findById(articleEditRequest.getArticleId())
.orElseThrow(() -> new IllegalArgumentException("NotFoundArticleException"));
Category category = categoryService.findCategory(articleEditRequest.getCategoryName());
tagUseCase.deleteAllTagsWith(article);
tagUseCase.createNewTagsAndArticleTagList(articleEditRequest.getTags(), article);
article.edit(articleEditRequest.getContent(),
articleEditRequest.getTitle(),
articleEditRequest.getToc(),
articleEditRequest.getThumbnailUrl(), category);
}
@Override
@CacheEvict(value = {"layoutCaching", "layoutRecentArticleCaching","seoCaching"}, allEntries = true)
public void deleteArticle(Long articleId) {
articleRepositoryPort.deleteArticle(articleId);
}
@Override
public void backupArticle(Long articleId) {
Article article = articleRepositoryPort.findById(articleId)
.orElseThrow(() -> new IllegalArgumentException("NotFoundArticle"));
articleBackupRepositoryPort.backup(article);
}
@Override
public void addHit(Long articleId) {
Article article = articleRepositoryPort.findById(articleId)
.orElseThrow(() -> new IllegalArgumentException("NotFoundArticleException"));
article.addHit();
}
/*
- 아티클 도메인으로 반환
*/
@Override
public Article getArticle(Long id){
return articleRepositoryPort.findArticleByIdFetchCategoryAndTags(id);
}
/*
- 모든 아티클 도메인으로 반환
*/
@Override
public List<Article> getTotalArticle(){
return articleRepositoryPort.findAllByOrderByIdDesc();
}
}