package com.syzton.sunread.service.book; import static com.syzton.sunread.repository.book.predicates.RecommendationPredicates.countRMDuringMonthly; import static com.syzton.sunread.repository.book.predicates.RecommendationPredicates.countRMDuringWeekly; import static com.syzton.sunread.repository.book.predicates.RecommendationPredicates.countRMDuringYearly; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import com.syzton.sunread.exception.common.DuplicateException; import com.syzton.sunread.exception.common.NotFoundException; import com.syzton.sunread.model.book.Book; import com.syzton.sunread.model.book.Recommendation; import com.syzton.sunread.model.user.User; import com.syzton.sunread.repository.book.BookRepository; import com.syzton.sunread.repository.book.RecommendationRepository; import com.syzton.sunread.repository.user.UserRepository; /** * Created by jerry on 3/18/15. */ @Service public class RecommendationRepositoryService implements RecommendationService { private BookRepository bookRepository; private RecommendationRepository recommendationRepository; private UserRepository userRepository; @Autowired public RecommendationRepositoryService(BookRepository bookRepository, RecommendationRepository recommendationRepository, UserRepository userRepository) { this.bookRepository = bookRepository; this.recommendationRepository = recommendationRepository; this.userRepository = userRepository; } @Transactional @Override public void recommend(Long bookId,Long userId) { Book book = bookRepository.findOne(bookId); if(book == null) throw new NotFoundException("book with id:"+ bookId +" entity dose not found.."); User user = userRepository.findOne(userId); if(user == null) throw new NotFoundException("user with id:"+ userId +" entity dose not found.."); Recommendation exitsWithUser = recommendationRepository.findByBookIdAndUserId(bookId, userId); if(exitsWithUser != null){ throw new DuplicateException("userId = "+userId+" is already recommended before..."); } Recommendation recommendation = new Recommendation(); recommendation.setBookId(bookId); recommendation.setUserId(userId); recommendationRepository.save(recommendation); book.getStatistic().increaseRecommends(); long weekRM = recommendationRepository.count(countRMDuringWeekly(bookId)); book.getStatistic().setWeeklyRecommend(weekRM); long monthRM = recommendationRepository.count(countRMDuringMonthly(bookId)); book.getStatistic().setMonthlyRecommend(monthRM); long yearRM = recommendationRepository.count(countRMDuringYearly(bookId)); book.getStatistic().setYearlyRecommend(yearRM); bookRepository.save(book); } }