diff --git a/server/Recruit-Api/src/main/java/com/econovation/recruit/api/applicant/controller/ApplicantController.java b/server/Recruit-Api/src/main/java/com/econovation/recruit/api/applicant/controller/ApplicantController.java index fe047b58..e313743d 100644 --- a/server/Recruit-Api/src/main/java/com/econovation/recruit/api/applicant/controller/ApplicantController.java +++ b/server/Recruit-Api/src/main/java/com/econovation/recruit/api/applicant/controller/ApplicantController.java @@ -1,11 +1,9 @@ package com.econovation.recruit.api.applicant.controller; -import static com.econovation.recruitcommon.consts.RecruitStatic.APPLICANT_SUCCESS_REGISTER_MESSAGE; -import static com.econovation.recruitcommon.consts.RecruitStatic.PASS_STATE_KEY; - import com.econovation.recruit.api.applicant.command.CreateAnswerCommand; import com.econovation.recruit.api.applicant.docs.CreateApplicantExceptionDocs; import com.econovation.recruit.api.applicant.dto.AnswersResponseDto; +import com.econovation.recruit.api.applicant.dto.GetApplicantsStatusResponse; import com.econovation.recruit.api.applicant.usecase.ApplicantCommandUseCase; import com.econovation.recruit.api.applicant.usecase.ApplicantQueryUseCase; import com.econovation.recruit.api.applicant.usecase.TimeTableLoadUseCase; @@ -20,11 +18,6 @@ import com.econovation.recruitinfrastructure.apache.CommonsEmailSender; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; -import java.time.LocalDateTime; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.UUID; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.axonframework.commandhandling.gateway.CommandGateway; @@ -34,6 +27,15 @@ import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; +import java.time.LocalDateTime; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.UUID; + +import static com.econovation.recruitcommon.consts.RecruitStatic.APPLICANT_SUCCESS_REGISTER_MESSAGE; +import static com.econovation.recruitcommon.consts.RecruitStatic.PASS_STATE_KEY; + @RestController @RequestMapping("/api/v1") @RequiredArgsConstructor @@ -156,4 +158,12 @@ public ResponseEntity> updateStatus(@PathVariable("applicant response.put(PASS_STATE_KEY, state); return new ResponseEntity(response,HttpStatus.OK); } + + @Operation(summary = "지원서의 합/불 상태를 조회합니다. (합/불 관리자 페이지 전용)") + @GetMapping("year/{year}/applicants/pass-state") + public ResponseEntity> getApplicantsStatus(@PathVariable("year") Integer year, + @RequestParam("order") String sortType) { + List result = applicantQueryUseCase.getApplicantsStatus(year, sortType); + return new ResponseEntity<>(result, HttpStatus.OK); + } } diff --git a/server/Recruit-Api/src/main/java/com/econovation/recruit/api/applicant/dto/GetApplicantsStatusResponse.java b/server/Recruit-Api/src/main/java/com/econovation/recruit/api/applicant/dto/GetApplicantsStatusResponse.java new file mode 100644 index 00000000..b65fe58d --- /dev/null +++ b/server/Recruit-Api/src/main/java/com/econovation/recruit/api/applicant/dto/GetApplicantsStatusResponse.java @@ -0,0 +1,34 @@ +package com.econovation.recruit.api.applicant.dto; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; + +import java.util.Map; + +import static com.econovation.recruitcommon.consts.RecruitStatic.PASS_STATE_KEY; + +@Data +@AllArgsConstructor +@Builder +public class GetApplicantsStatusResponse { + private String field1; + private String field2; + private String field3; + private String name; + private String id; + private Integer year; + private String state; + + public static GetApplicantsStatusResponse of(Map result) { + return GetApplicantsStatusResponse.builder() + .field1((String) result.get("field1")) + .field2((String) result.get("field2")) + .field3((String) result.get("field3")) + .name((String) result.get("name")) + .id((String) result.get("id")) + .year((Integer) result.get("year")) + .state(result.get(PASS_STATE_KEY).toString()) + .build(); + } +} diff --git a/server/Recruit-Api/src/main/java/com/econovation/recruit/api/applicant/service/ApplicantService.java b/server/Recruit-Api/src/main/java/com/econovation/recruit/api/applicant/service/ApplicantService.java index 7f7805fb..b3df61aa 100644 --- a/server/Recruit-Api/src/main/java/com/econovation/recruit/api/applicant/service/ApplicantService.java +++ b/server/Recruit-Api/src/main/java/com/econovation/recruit/api/applicant/service/ApplicantService.java @@ -2,6 +2,7 @@ import com.econovation.recruit.api.applicant.aggregate.AnswerAggregate; import com.econovation.recruit.api.applicant.dto.AnswersResponseDto; +import com.econovation.recruit.api.applicant.dto.GetApplicantsStatusResponse; import com.econovation.recruit.api.applicant.query.AnswerQuery; import com.econovation.recruit.api.applicant.usecase.ApplicantQueryUseCase; import com.econovation.recruit.utils.sort.SortHelper; @@ -48,16 +49,7 @@ public Map execute(String answerId) { public AnswersResponseDto execute(Integer year, Integer page, String sortType) { PageInfo pageInfo = getPageInfo(year, page); List result = answerAdaptor.findByYear(year, page); - result.forEach(answer -> answer.getQna().put(PASS_STATE_KEY, answer.getApplicantStateOrDefault())); - - sortHelper.sort(result, sortType); - List> sortedResult = result.stream().map(MongoAnswer::getQna).toList(); - // answer id를 각 map에 추가 - sortedResult.forEach( - map -> { - map.put("id", result.get(sortedResult.indexOf(map)).getId()); - }); - + List> sortedResult = sortAndAddIds(result, sortType); if (sortedResult.isEmpty()) { return AnswersResponseDto.of(Collections.emptyList(), pageInfo); } @@ -181,4 +173,22 @@ public List> execute(List fields, Integer page) { List byYear = answerAdaptor.findByYear(year, page); return splitByAnswers(fields, byYear); } + + @Override + public List getApplicantsStatus(Integer year, String sortType) { + List result = answerAdaptor.findByYear(year); + List> sortedResult = sortAndAddIds(result, sortType); + return sortedResult.stream().map(GetApplicantsStatusResponse::of).toList(); + } + + private List> sortAndAddIds(List result, String sortType) { + sortHelper.sort(result, sortType); + List> sortedResult = result.stream().map(MongoAnswer::getQna).toList(); + sortedResult.forEach( + map -> { + map.put("id", result.get(sortedResult.indexOf(map)).getId()); + map.put(PASS_STATE_KEY, result.get(sortedResult.indexOf(map)).getApplicantStateOrDefault()); + }); + return sortedResult; + } } diff --git a/server/Recruit-Api/src/main/java/com/econovation/recruit/api/applicant/usecase/ApplicantQueryUseCase.java b/server/Recruit-Api/src/main/java/com/econovation/recruit/api/applicant/usecase/ApplicantQueryUseCase.java index 9258d626..177e3721 100644 --- a/server/Recruit-Api/src/main/java/com/econovation/recruit/api/applicant/usecase/ApplicantQueryUseCase.java +++ b/server/Recruit-Api/src/main/java/com/econovation/recruit/api/applicant/usecase/ApplicantQueryUseCase.java @@ -1,6 +1,7 @@ package com.econovation.recruit.api.applicant.usecase; import com.econovation.recruit.api.applicant.dto.AnswersResponseDto; +import com.econovation.recruit.api.applicant.dto.GetApplicantsStatusResponse; import com.econovation.recruitcommon.annotation.UseCase; import com.econovation.recruitdomain.domains.applicant.domain.MongoAnswer; import java.util.List; @@ -26,4 +27,6 @@ List> execute( Map> findAllApplicantVo(List fields); AnswersResponseDto search(Integer page, String searchKeyword); + + List getApplicantsStatus(Integer year, String sortType); } diff --git a/server/Recruit-Api/src/main/java/com/econovation/recruit/api/interviewer/controller/InterviewerController.java b/server/Recruit-Api/src/main/java/com/econovation/recruit/api/interviewer/controller/InterviewerController.java index 22f5892d..af0e0d3d 100644 --- a/server/Recruit-Api/src/main/java/com/econovation/recruit/api/interviewer/controller/InterviewerController.java +++ b/server/Recruit-Api/src/main/java/com/econovation/recruit/api/interviewer/controller/InterviewerController.java @@ -38,7 +38,7 @@ public ResponseEntity findByApplicantId( @Operation(description = "Interviewer 전체 조회", summary = "면접관 전체 조회") @ApiErrorExceptionsExample(InterviewerExceptionDocs.class) @GetMapping("/interviewers") - public ResponseEntity> findAll(@ParameterObject String order) { + public ResponseEntity> findAll(@ParameterObject String order, @RequestParam(required = false) List roles) { List interviewers = interviewerUseCase.findAll(order); return new ResponseEntity(interviewers, HttpStatus.OK); } diff --git a/server/Recruit-Domain/src/main/java/com/econovation/recruitdomain/domains/applicant/adaptor/AnswerAdaptor.java b/server/Recruit-Domain/src/main/java/com/econovation/recruitdomain/domains/applicant/adaptor/AnswerAdaptor.java index 0b1a27bb..31ddedc3 100644 --- a/server/Recruit-Domain/src/main/java/com/econovation/recruitdomain/domains/applicant/adaptor/AnswerAdaptor.java +++ b/server/Recruit-Domain/src/main/java/com/econovation/recruitdomain/domains/applicant/adaptor/AnswerAdaptor.java @@ -44,6 +44,13 @@ public List findByYear(Integer year, Integer page) { return mongoTemplate.find(query, MongoAnswer.class); } + public List findByYear(Integer year) { + Query query = + new Query() + .addCriteria(Criteria.where("year").is(year)); + return mongoTemplate.find(query, MongoAnswer.class); + } + public long getTotalCountByYear(Integer year) { return mongoTemplate.count(Query.query(Criteria.where("year").is(year)), MongoAnswer.class); }