package io.spring.application.article; import io.spring.application.profile.UserRelationshipQueryService; import io.spring.core.user.User; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; 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 findById(String id, User user) { ArticleData articleData = articleReadService.findById(id); if (articleData == null) { return Optional.empty(); } else { if (user != null) { fillExtraInfo(id, user, articleData); } return Optional.of(articleData); } } public Optional 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())); } }