From dc236ea01c1277e6aef82a900e1e9837d2be4fb5 Mon Sep 17 00:00:00 2001 From: pkl0912 Date: Mon, 9 Sep 2024 18:31:04 +0900 Subject: [PATCH] =?UTF-8?q?#84=20[refactor]=20=ED=9A=8C=EA=B3=A0=20?= =?UTF-8?q?=EB=B3=B4=EB=93=9C=20api=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../schedule/domain/dto/CompanyReviewDTO.java | 2 + .../schedule/service/ScheduleService.java | 119 ++++++++++-------- 2 files changed, 67 insertions(+), 54 deletions(-) diff --git a/src/main/java/com/example/letscareer/schedule/domain/dto/CompanyReviewDTO.java b/src/main/java/com/example/letscareer/schedule/domain/dto/CompanyReviewDTO.java index 0872469..8687704 100644 --- a/src/main/java/com/example/letscareer/schedule/domain/dto/CompanyReviewDTO.java +++ b/src/main/java/com/example/letscareer/schedule/domain/dto/CompanyReviewDTO.java @@ -4,6 +4,8 @@ public record CompanyReviewDTO( String company, + String department, + List interviewReviews, // 면접 리뷰 List midtermReviews // 중간 리뷰 ) { 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 b036eb2..ed27031 100644 --- a/src/main/java/com/example/letscareer/schedule/service/ScheduleService.java +++ b/src/main/java/com/example/letscareer/schedule/service/ScheduleService.java @@ -261,81 +261,92 @@ 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); // 페이지네이션 + Pageable pageable = PageRequest.of(page - 1, size); // 사용자 조회 User user = userRepository.findById(userId) .orElseThrow(() -> new NotFoundException(USER_NOT_FOUND_EXCEPTION)); - // 회사명(company)별로 스케줄을 그룹화하여 페이징 처리 - Page companyPage = scheduleRepository.findDistinctCompanyByUser(user, pageable); + // 지원별로 스케줄을 그룹화하여 페이징 처리 + Page schedulePage = scheduleRepository.findAllByUserUserId(userId, pageable); - // 기업별로 리뷰를 분류하기 위한 List + // 기업별로 리뷰를 분류하기 위한 리스트 List companies = new ArrayList<>(); - // 각 회사별로 스케줄과 스테이지를 조회하고 리뷰 여부 확인 - for (String company : companyPage) { - // 각 회사에 속하는 모든 스케줄 조회 - List schedules = scheduleRepository.findAllByUserAndCompany(user, company); + // "서류"만 있는 스케줄을 제외하기 위한 리스트 + 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(); + String department = schedule.getDepartment(); + + // 해당 스케줄의 모든 스테이지를 조회 + List stages = stageRepository.findAllBySchedule(schedule); - // 면접 및 중간 리뷰 리스트 초기화 List interviewReviews = new ArrayList<>(); List midtermReviews = new ArrayList<>(); - for (Schedule schedule : schedules) { - // 해당 스케줄의 모든 스테이지를 조회 - List stages = stageRepository.findAllBySchedule(schedule); - - for (Stage stage : stages) { - String type = stage.getType().getValue(); - boolean isReviewed = false; - Long reviewId = null; - - if (type.equals("면접")) { - isReviewed = intReviewRepository.existsByStage(stage); - if (isReviewed) { - reviewId = intReviewRepository.findIntReviewIdByStageAndUser(stage, user).orElse(null); - } - - // 면접 리뷰 추가 - CompanyReviewDetailDTO reviewDetail = new CompanyReviewDetailDTO( - schedule.getScheduleId(), - stage.getStageId(), - reviewId, - schedule.getDepartment(), - stage.getDate(), - isReviewed - ); - interviewReviews.add(reviewDetail); - - } else if (type.equals("중간")) { - isReviewed = midReviewRepository.existsByStage(stage); - if (isReviewed) { - reviewId = midReviewRepository.findMidReviewIdByStageAndUser(stage, user).orElse(null); - } - - // 중간 리뷰 추가 - CompanyReviewDetailDTO reviewDetail = new CompanyReviewDetailDTO( - schedule.getScheduleId(), - stage.getStageId(), - reviewId, - schedule.getDepartment(), - stage.getDate(), - isReviewed - ); - midtermReviews.add(reviewDetail); - } + for (Stage stage : stages) { + String type = stage.getType().getValue(); + boolean isReviewed = false; + Long reviewId = null; + + if (type.equals("면접")) { + isReviewed = intReviewRepository.existsByStage(stage); + reviewId = isReviewed ? intReviewRepository.findIntReviewIdByStageAndUser(stage, user).orElse(null) : null; + + // 면접 리뷰 추가 + CompanyReviewDetailDTO reviewDetail = new CompanyReviewDetailDTO( + schedule.getScheduleId(), + stage.getStageId(), + reviewId, + schedule.getDepartment(), + stage.getDate(), + isReviewed + ); + interviewReviews.add(reviewDetail); + + } else if (type.equals("중간")) { + isReviewed = midReviewRepository.existsByStage(stage); + reviewId = isReviewed ? midReviewRepository.findMidReviewIdByStageAndUser(stage, user).orElse(null) : null; + + // 중간 리뷰 추가 + CompanyReviewDetailDTO reviewDetail = new CompanyReviewDetailDTO( + schedule.getScheduleId(), + stage.getStageId(), + reviewId, + schedule.getDepartment(), + stage.getDate(), + isReviewed + ); + midtermReviews.add(reviewDetail); } } // 회사별로 그룹화된 리뷰 DTO 추가 - companies.add(new CompanyReviewDTO(company, interviewReviews, midtermReviews)); + companies.add(new CompanyReviewDTO(company, department, interviewReviews, midtermReviews)); } + // 총 페이지 수와 필터링된 스케줄에 따른 결과 반환 return new CompanyReviewListResponse( page, size, - companyPage.getTotalElements(), + (long) filteredSchedules.size(), companies ); }