CollectionService.java 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. package com.izouma.nineth.service;
  2. import com.izouma.nineth.domain.Collection;
  3. import com.izouma.nineth.domain.Follow;
  4. import com.izouma.nineth.domain.Like;
  5. import com.izouma.nineth.domain.User;
  6. import com.izouma.nineth.dto.CollectionDTO;
  7. import com.izouma.nineth.dto.PageQuery;
  8. import com.izouma.nineth.dto.UserDTO;
  9. import com.izouma.nineth.repo.CollectionRepo;
  10. import com.izouma.nineth.repo.LikeRepo;
  11. import com.izouma.nineth.utils.JpaUtils;
  12. import com.izouma.nineth.utils.SecurityUtils;
  13. import lombok.AllArgsConstructor;
  14. import org.springframework.beans.BeanUtils;
  15. import org.springframework.data.domain.Page;
  16. import org.springframework.data.domain.PageImpl;
  17. import org.springframework.stereotype.Service;
  18. import java.util.List;
  19. import java.util.stream.Collectors;
  20. @Service
  21. @AllArgsConstructor
  22. public class CollectionService {
  23. private CollectionRepo collectionRepo;
  24. private LikeRepo likeRepo;
  25. public Page<Collection> all(PageQuery pageQuery) {
  26. return collectionRepo.findAll(JpaUtils.toSpecification(pageQuery, Collection.class), JpaUtils.toPageRequest(pageQuery));
  27. }
  28. public CollectionDTO toDTO(Collection collection) {
  29. return toDTO(collection, true);
  30. }
  31. public CollectionDTO toDTO(Collection collection, boolean join) {
  32. CollectionDTO collectionDTO = new CollectionDTO();
  33. BeanUtils.copyProperties(collection, collectionDTO);
  34. if (join) {
  35. if (SecurityUtils.getAuthenticatedUser() != null) {
  36. List<Like> list = likeRepo.findByUserIdAndCollectionId(SecurityUtils.getAuthenticatedUser().getId(),
  37. collection.getId());
  38. collectionDTO.setLiked(!list.isEmpty());
  39. }
  40. }
  41. return collectionDTO;
  42. }
  43. public List<CollectionDTO> toDTO(List<Collection> collections) {
  44. return collections.stream().parallel().map(collection -> {
  45. CollectionDTO dto = toDTO(collection, false);
  46. if (SecurityUtils.getAuthenticatedUser() != null) {
  47. List<Like> likes = likeRepo.findByUserId(SecurityUtils.getAuthenticatedUser().getId());
  48. dto.setLiked(likes.stream().anyMatch(l -> l.getCollectionId().equals(collection.getId())));
  49. }
  50. return dto;
  51. }).collect(Collectors.toList());
  52. }
  53. public Page<CollectionDTO> toDTO(Page<Collection> collections) {
  54. List<CollectionDTO> userDTOS = toDTO(collections.getContent());
  55. return new PageImpl<>(userDTOS, collections.getPageable(), collections.getTotalElements());
  56. }
  57. }