Closed clap-0 closed 7 months ago
상태에 따라 눈길 조회 로직을 분리하였습니다.
@GetMapping("/nungils") public ResponseEntity<Slice<NungilSliceResponse>> getNungilsByMemberAndStatus(Principal principal, @RequestParam NungilStatus status, @RequestParam int page, @RequestParam int size){ Member member = getMember(principal); Slice<NungilSliceResponse> nungilPageResponses = null; if (NungilStatus.RECOMMENDED.equals(status)) { nungilPageResponses = nungilService.getRecommendedNungilSlice(member, page, size); } else { nungilPageResponses = nungilService.getNungilSliceByMemberAndStatus(member, status, page, size); } return ResponseEntity.ok(nungilPageResponses); }
기존 눈길 조회 메서드에서는, 상태가 RECOMMENDED가 아닌 눈길들만을 담당합니다. Location을 사용하지 않기 때문에 null인지 확인하는 코드를 제외시켰습니다.
RECOMMENDED
null
public Slice<NungilSliceResponse> getNungilSliceByMemberAndStatus(Member member, NungilStatus status, int page, int size) { PageRequest pageRequest = PageRequest.of(page, size,Sort.by("createdAt").descending()); // Nungil 엔티티를 데이터베이스에서 조회 Slice<Nungil> nungilSlice = nungilRepository.findAllByMemberAndStatus(pageRequest, member, status); // Nungil 엔티티를 NungilPageResponse DTO로 변환 List<NungilSliceResponse> nungilResponses = nungilSlice.getContent().stream() .map(nungil -> NungilSliceResponse.create(nungil, nungil.getReceiver())) .collect(Collectors.toList()); // 변환된 DTO 리스트와 함께 새로운 Slice 객체를 생성하여 반환 return new SliceImpl<>(nungilResponses, pageRequest, nungilSlice.hasNext()); }
추천된 눈길 조회 시, 사용자의 drawCount가 0이라면 새로운 프로필을 자동으로 뽑습니다. 이후에는 기존 눈길 조회와 동일합니다.
drawCount
@Transactional public Slice<NungilSliceResponse> getRecommendedNungilSlice(Member member, int page, int size) { PageRequest pageRequest = PageRequest.of(page, size,Sort.by("createdAt").descending()); // 사용자가 아직까지 프로필을 뽑지 않았다면, 자동으로 하나 뽑는다. if (member.getDrawCount() == 0) { this.recommendMember(member, new ProfileRecommendRequest(true)); } // Nungil 엔티티를 데이터베이스에서 조회 Slice<Nungil> nungilSlice = nungilRepository.findAllByMemberAndStatus(pageRequest, member, NungilStatus.RECOMMENDED); if (member.getLocation() == null || nungilSlice.getContent().stream() .anyMatch(nungil -> nungil.getReceiver().getLocation() == null)) { throw new GeneralException(MemberErrorResult.LOCATION_NOT_FOUND); } // Nungil 엔티티를 NungilPageResponse DTO로 변환 List<NungilSliceResponse> nungilResponses = nungilSlice.getContent().stream() .filter(nungil -> member.getLocation().equals(nungil.getReceiver().getLocation())) .map(nungil -> NungilSliceResponse.create(nungil, nungil.getReceiver())) .collect(Collectors.toList()); // 변환된 DTO 리스트와 함께 새로운 Slice 객체를 생성하여 반환 return new SliceImpl<>(nungilResponses, pageRequest, nungilSlice.hasNext()); }
🔥 Related Issues
💜 작업 내용
✅ PR Point
상태에 따라 눈길 조회 로직을 분리하였습니다.
기존 눈길 조회 메서드에서는, 상태가
RECOMMENDED
가 아닌 눈길들만을 담당합니다. Location을 사용하지 않기 때문에null
인지 확인하는 코드를 제외시켰습니다.추천된 눈길 조회 시, 사용자의
drawCount
가 0이라면 새로운 프로필을 자동으로 뽑습니다. 이후에는 기존 눈길 조회와 동일합니다.