From b2c27a029ac6756603a8f6c694237b9a2ba3607e Mon Sep 17 00:00:00 2001 From: pkl0912 Date: Mon, 9 Sep 2024 19:30:36 +0900 Subject: [PATCH] =?UTF-8?q?#86=20[refactor]=20=ED=9A=8C=EA=B3=A0=EB=B3=B4?= =?UTF-8?q?=EB=93=9C=20paging=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../schedule/service/ScheduleService.java | 41 ++++++++----------- 1 file changed, 17 insertions(+), 24 deletions(-) diff --git a/src/main/java/com/example/letscareer/schedule/service/ScheduleService.java b/src/main/java/com/example/letscareer/schedule/service/ScheduleService.java index ed27031..e1b2163 100644 --- a/src/main/java/com/example/letscareer/schedule/service/ScheduleService.java +++ b/src/main/java/com/example/letscareer/schedule/service/ScheduleService.java @@ -25,6 +25,7 @@ import java.util.Comparator; import java.util.List; import java.util.Optional; +import java.util.stream.Collectors; import static com.example.letscareer.common.exception.enums.ErrorCode.SCHEDULE_NOT_FOUND_EXCEPTION; import static com.example.letscareer.common.exception.enums.ErrorCode.USER_NOT_FOUND_EXCEPTION; @@ -261,35 +262,22 @@ public FastReviewListResponse getFastReviews(final Long userId, final int page, ); } public CompanyReviewListResponse getCompanyReviewList(final Long userId, final int page, final int size) { - Pageable pageable = PageRequest.of(page - 1, size); - // 사용자 조회 User user = userRepository.findById(userId) .orElseThrow(() -> new NotFoundException(USER_NOT_FOUND_EXCEPTION)); - // 지원별로 스케줄을 그룹화하여 페이징 처리 - Page schedulePage = scheduleRepository.findAllByUserUserId(userId, pageable); + // 모든 스케줄을 가져와서 필터링 + List schedules = scheduleRepository.findAllByUserUserId(userId); + + // "서류"만 있는 스케줄을 제외하기 위한 필터링 + List filteredSchedules = schedules.stream() + .filter(schedule -> stageRepository.findAllBySchedule(schedule).stream() + .anyMatch(stage -> stage.getType().getValue().equals("면접") || stage.getType().getValue().equals("중간"))) + .collect(Collectors.toList()); // 기업별로 리뷰를 분류하기 위한 리스트 List companies = new ArrayList<>(); - // "서류"만 있는 스케줄을 제외하기 위한 리스트 - List filteredSchedules = new ArrayList<>(); - - // 각 스케줄을 확인하여 "면접"이나 "중간"이 있는 경우만 필터링 - for (Schedule schedule : schedulePage) { - List stages = stageRepository.findAllBySchedule(schedule); - - // 스케줄의 스테이지 중 "면접"이나 "중간"이 있는지 확인 - boolean hasInterviewOrMidterm = stages.stream() - .anyMatch(stage -> stage.getType().getValue().equals("면접") || stage.getType().getValue().equals("중간")); - - // "면접" 또는 "중간" 스테이지가 있으면 필터링된 리스트에 추가 - if (hasInterviewOrMidterm) { - filteredSchedules.add(schedule); - } - } - // 필터링된 스케줄을 처리 for (Schedule schedule : filteredSchedules) { String company = schedule.getCompany(); @@ -342,12 +330,17 @@ public CompanyReviewListResponse getCompanyReviewList(final Long userId, final i companies.add(new CompanyReviewDTO(company, department, interviewReviews, midtermReviews)); } - // 총 페이지 수와 필터링된 스케줄에 따른 결과 반환 + // 필터링된 회사 리스트를 페이지네이션 적용 + int start = (page - 1) * size; + int end = Math.min(start + size, companies.size()); + List paginatedCompanies = companies.subList(start, end); + + // 총 페이지 수와 필터링된 회사에 따른 결과 반환 return new CompanyReviewListResponse( page, size, - (long) filteredSchedules.size(), - companies + (long) companies.size(), + paginatedCompanies ); }