spring-boot-realworld-examp.../src/main/java/io/spring/application/article/ArticleQueryService.java

69 lines
2.7 KiB
Java
Raw Normal View History

2017-08-15 09:47:18 +07:00
package io.spring.application.article;
2017-08-17 13:27:29 +07:00
import io.spring.application.Page;
2017-08-15 09:47:18 +07:00
import io.spring.application.profile.UserRelationshipQueryService;
import io.spring.core.user.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
2017-08-17 13:27:29 +07:00
import java.util.ArrayList;
import java.util.List;
2017-08-15 09:47:18 +07:00
import java.util.Optional;
@Service
public class ArticleQueryService {
private ArticleReadService articleReadService;
private UserRelationshipQueryService userRelationshipQueryService;
private ArticleFavoritesQueryService articleFavoritesQueryService;
@Autowired
public ArticleQueryService(ArticleReadService articleReadService,
UserRelationshipQueryService userRelationshipQueryService,
ArticleFavoritesQueryService articleFavoritesQueryService) {
this.articleReadService = articleReadService;
this.userRelationshipQueryService = userRelationshipQueryService;
this.articleFavoritesQueryService = articleFavoritesQueryService;
}
public Optional<ArticleData> findById(String id, User user) {
2017-08-15 10:21:55 +07:00
ArticleData articleData = articleReadService.findById(id);
2017-08-15 09:47:18 +07:00
if (articleData == null) {
return Optional.empty();
} else {
2017-08-15 10:21:55 +07:00
if (user != null) {
fillExtraInfo(id, user, articleData);
}
2017-08-15 09:47:18 +07:00
return Optional.of(articleData);
}
}
2017-08-15 10:21:55 +07:00
public Optional<ArticleData> findBySlug(String slug, User user) {
ArticleData articleData = articleReadService.findBySlug(slug);
if (articleData == null) {
return Optional.empty();
} else {
if (user != null) {
fillExtraInfo(articleData.getId(), user, articleData);
}
return Optional.of(articleData);
}
}
private void fillExtraInfo(String id, User user, ArticleData articleData) {
articleData.setFavorited(articleFavoritesQueryService.isUserFavorite(user.getId(), id));
articleData.setFavoritesCount(articleFavoritesQueryService.articleFavoriteCount(id));
articleData.getProfileData().setFollowing(
userRelationshipQueryService.isUserFollowing(
user.getId(),
articleData.getProfileData().getId()));
}
2017-08-17 13:27:29 +07:00
public ArticleDataList findRecentArticles(String tag, String author, String favoritedBy, Page page) {
List<String> articleIds = articleReadService.queryArticles(tag, author, favoritedBy, page);
int articleCount = articleReadService.countArticle(tag, author, favoritedBy);
return new ArticleDataList(
articleIds.size() == 0 ? new ArrayList<>() : articleReadService.findArticles(articleIds),
articleCount);
}
2017-08-15 09:47:18 +07:00
}