diff --git a/src/main/java/dmu/dasom/api/domain/interview/dto/InterviewReservationApplicantResponseDto.java b/src/main/java/dmu/dasom/api/domain/interview/dto/InterviewReservationApplicantResponseDto.java new file mode 100644 index 0000000..c536ce1 --- /dev/null +++ b/src/main/java/dmu/dasom/api/domain/interview/dto/InterviewReservationApplicantResponseDto.java @@ -0,0 +1,40 @@ +package dmu.dasom.api.domain.interview.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotNull; +import lombok.*; + +@Getter +@Setter +@NoArgsConstructor +@AllArgsConstructor +@Builder +@Schema(name = "InterviewReservationApplicantResponseDto", description = "면접 예약 지원자 응답 DTO") +public class InterviewReservationApplicantResponseDto { + + @NotNull(message = "지원자 ID는 필수 값입니다.") + @Schema(description = "지원자의 고유 ID", example = "1234") + private Long applicantId; + + @NotNull(message = "이름은 필수 값입니다.") + @Schema(description = "지원자 이름", example = "홍길동") + private String applicantName; + + @NotNull(message = "학번은 필수 값입니다.") + @Schema(description = "지원자 학번", example = "20210001") + private String studentNo; + + @NotNull(message = "연락처는 필수 값입니다.") + @Schema(description = "지원자 연락처", example = "010-1234-5678") + private String contact; + + @NotNull(message = "이메일은 필수 값입니다.") + @Schema(description = "지원자 이메일", example = "test@example.com") + private String email; + + @Schema(description = "희망 활동", example = "프로젝트") + private String activityWish; + + @Schema(description = "지원 동기", example = "동아리 활동을 통해 새로운 경험을 쌓고 싶어서 지원합니다.") + private String reasonForApply; +} diff --git a/src/main/java/dmu/dasom/api/domain/interview/service/InterviewService.java b/src/main/java/dmu/dasom/api/domain/interview/service/InterviewService.java index 94f42be..f58f8ce 100644 --- a/src/main/java/dmu/dasom/api/domain/interview/service/InterviewService.java +++ b/src/main/java/dmu/dasom/api/domain/interview/service/InterviewService.java @@ -1,5 +1,6 @@ package dmu.dasom.api.domain.interview.service; +import dmu.dasom.api.domain.interview.dto.InterviewReservationApplicantResponseDto; import dmu.dasom.api.domain.interview.dto.InterviewReservationRequestDto; import dmu.dasom.api.domain.interview.dto.InterviewSlotResponseDto; @@ -24,4 +25,6 @@ public interface InterviewService { List getAllInterviewSlots(); + List getAllInterviewApplicants(); + } diff --git a/src/main/java/dmu/dasom/api/domain/interview/service/InterviewServiceImpl.java b/src/main/java/dmu/dasom/api/domain/interview/service/InterviewServiceImpl.java index 6be5ed3..9be2003 100644 --- a/src/main/java/dmu/dasom/api/domain/interview/service/InterviewServiceImpl.java +++ b/src/main/java/dmu/dasom/api/domain/interview/service/InterviewServiceImpl.java @@ -4,6 +4,7 @@ import dmu.dasom.api.domain.applicant.repository.ApplicantRepository; import dmu.dasom.api.domain.common.exception.CustomException; import dmu.dasom.api.domain.common.exception.ErrorCode; +import dmu.dasom.api.domain.interview.dto.InterviewReservationApplicantResponseDto; import dmu.dasom.api.domain.interview.dto.InterviewReservationRequestDto; import dmu.dasom.api.domain.interview.dto.InterviewSlotResponseDto; import dmu.dasom.api.domain.interview.entity.InterviewReservation; @@ -22,6 +23,7 @@ import java.time.LocalTime; import java.util.ArrayList; import java.util.List; +import java.util.stream.Collectors; @RequiredArgsConstructor @Service @@ -37,10 +39,14 @@ public class InterviewServiceImpl implements InterviewService{ @Override @Transactional public List createInterviewSlots(LocalDate newStartDate, LocalDate newEndDate, LocalTime newStartTime, LocalTime newEndTime) { - boolean slotsExist = interviewSlotRepository.existsAny(); + List existingSlots = interviewSlotRepository.findAll(); - if(slotsExist){ - interviewSlotRepository.deleteAll(); + if(!existingSlots.isEmpty()){ + List slotsToDelete = existingSlots.stream() + .filter(slot -> slot.getCurrentCandidates() == 0) + .toList(); + + interviewSlotRepository.deleteAll(slotsToDelete); } List newSlots = new ArrayList<>(); @@ -142,4 +148,24 @@ public List getAllInterviewSlots() { .toList(); } + @Override + public List getAllInterviewApplicants() { + List reservations = interviewReservationRepository.findAll(); + + return reservations.stream() + .map(reservation -> { + Applicant applicant = reservation.getApplicant(); + return InterviewReservationApplicantResponseDto.builder() + .applicantId(applicant.getId()) + .applicantName(applicant.getName()) + .studentNo(applicant.getStudentNo()) + .contact(applicant.getContact()) + .email(applicant.getEmail()) + .activityWish(applicant.getActivityWish()) + .reasonForApply(applicant.getReasonForApply()) + .build(); + }) + .collect(Collectors.toList()); + } + } diff --git a/src/main/java/dmu/dasom/api/domain/recruit/controller/RecruitController.java b/src/main/java/dmu/dasom/api/domain/recruit/controller/RecruitController.java index cebfb82..44e29d7 100644 --- a/src/main/java/dmu/dasom/api/domain/recruit/controller/RecruitController.java +++ b/src/main/java/dmu/dasom/api/domain/recruit/controller/RecruitController.java @@ -3,10 +3,7 @@ import dmu.dasom.api.domain.applicant.dto.ApplicantCreateRequestDto; import dmu.dasom.api.domain.applicant.service.ApplicantService; import dmu.dasom.api.domain.common.exception.ErrorResponse; -import dmu.dasom.api.domain.interview.dto.InterviewReservationRequestDto; -import dmu.dasom.api.domain.interview.dto.InterviewSlotCreateRequestDto; -import dmu.dasom.api.domain.interview.dto.InterviewSlotRequestDto; -import dmu.dasom.api.domain.interview.dto.InterviewSlotResponseDto; +import dmu.dasom.api.domain.interview.dto.*; import dmu.dasom.api.domain.interview.service.InterviewService; import dmu.dasom.api.domain.recruit.dto.ResultCheckRequestDto; import dmu.dasom.api.domain.recruit.dto.ResultCheckResponseDto; @@ -128,4 +125,10 @@ public ResponseEntity> getAllInterviewSlots() { return ResponseEntity.ok(allSlots); } + @GetMapping("/interview/applicants") + public ResponseEntity> getAllInterviewApplicants() { + List applicants = interviewService.getAllInterviewApplicants(); + return ResponseEntity.ok(applicants); + } + }