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
|
|
|
}
|