Skip to content

Commit 5511ce7

Browse files
authored
fix: 면접 예약 API 예약자 명단 조회 API 추가
* fix: 면접 예약 API 면접 일정 조회시 status도 같이 반환 * fix: 면접 예약 API 예약자 명단 조회 API 추가 * fix: 면접 예약 API 예약되어있는 슬롯은 삭제하지 않는 기능 추가
1 parent 96cc73f commit 5511ce7

File tree

4 files changed

+79
-7
lines changed

4 files changed

+79
-7
lines changed
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
package dmu.dasom.api.domain.interview.dto;
2+
3+
import io.swagger.v3.oas.annotations.media.Schema;
4+
import jakarta.validation.constraints.NotNull;
5+
import lombok.*;
6+
7+
@Getter
8+
@Setter
9+
@NoArgsConstructor
10+
@AllArgsConstructor
11+
@Builder
12+
@Schema(name = "InterviewReservationApplicantResponseDto", description = "면접 예약 지원자 응답 DTO")
13+
public class InterviewReservationApplicantResponseDto {
14+
15+
@NotNull(message = "지원자 ID는 필수 값입니다.")
16+
@Schema(description = "지원자의 고유 ID", example = "1234")
17+
private Long applicantId;
18+
19+
@NotNull(message = "이름은 필수 값입니다.")
20+
@Schema(description = "지원자 이름", example = "홍길동")
21+
private String applicantName;
22+
23+
@NotNull(message = "학번은 필수 값입니다.")
24+
@Schema(description = "지원자 학번", example = "20210001")
25+
private String studentNo;
26+
27+
@NotNull(message = "연락처는 필수 값입니다.")
28+
@Schema(description = "지원자 연락처", example = "010-1234-5678")
29+
private String contact;
30+
31+
@NotNull(message = "이메일은 필수 값입니다.")
32+
@Schema(description = "지원자 이메일", example = "[email protected]")
33+
private String email;
34+
35+
@Schema(description = "희망 활동", example = "프로젝트")
36+
private String activityWish;
37+
38+
@Schema(description = "지원 동기", example = "동아리 활동을 통해 새로운 경험을 쌓고 싶어서 지원합니다.")
39+
private String reasonForApply;
40+
}

src/main/java/dmu/dasom/api/domain/interview/service/InterviewService.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package dmu.dasom.api.domain.interview.service;
22

3+
import dmu.dasom.api.domain.interview.dto.InterviewReservationApplicantResponseDto;
34
import dmu.dasom.api.domain.interview.dto.InterviewReservationRequestDto;
45
import dmu.dasom.api.domain.interview.dto.InterviewSlotResponseDto;
56

@@ -24,4 +25,6 @@ public interface InterviewService {
2425

2526
List<InterviewSlotResponseDto> getAllInterviewSlots();
2627

28+
List<InterviewReservationApplicantResponseDto> getAllInterviewApplicants();
29+
2730
}

src/main/java/dmu/dasom/api/domain/interview/service/InterviewServiceImpl.java

Lines changed: 29 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import dmu.dasom.api.domain.applicant.repository.ApplicantRepository;
55
import dmu.dasom.api.domain.common.exception.CustomException;
66
import dmu.dasom.api.domain.common.exception.ErrorCode;
7+
import dmu.dasom.api.domain.interview.dto.InterviewReservationApplicantResponseDto;
78
import dmu.dasom.api.domain.interview.dto.InterviewReservationRequestDto;
89
import dmu.dasom.api.domain.interview.dto.InterviewSlotResponseDto;
910
import dmu.dasom.api.domain.interview.entity.InterviewReservation;
@@ -22,6 +23,7 @@
2223
import java.time.LocalTime;
2324
import java.util.ArrayList;
2425
import java.util.List;
26+
import java.util.stream.Collectors;
2527

2628
@RequiredArgsConstructor
2729
@Service
@@ -37,10 +39,14 @@ public class InterviewServiceImpl implements InterviewService{
3739
@Override
3840
@Transactional
3941
public List<InterviewSlotResponseDto> createInterviewSlots(LocalDate newStartDate, LocalDate newEndDate, LocalTime newStartTime, LocalTime newEndTime) {
40-
boolean slotsExist = interviewSlotRepository.existsAny();
42+
List<InterviewSlot> existingSlots = interviewSlotRepository.findAll();
4143

42-
if(slotsExist){
43-
interviewSlotRepository.deleteAll();
44+
if(!existingSlots.isEmpty()){
45+
List<InterviewSlot> slotsToDelete = existingSlots.stream()
46+
.filter(slot -> slot.getCurrentCandidates() == 0)
47+
.toList();
48+
49+
interviewSlotRepository.deleteAll(slotsToDelete);
4450
}
4551

4652
List<InterviewSlotResponseDto> newSlots = new ArrayList<>();
@@ -142,4 +148,24 @@ public List<InterviewSlotResponseDto> getAllInterviewSlots() {
142148
.toList();
143149
}
144150

151+
@Override
152+
public List<InterviewReservationApplicantResponseDto> getAllInterviewApplicants() {
153+
List<InterviewReservation> reservations = interviewReservationRepository.findAll();
154+
155+
return reservations.stream()
156+
.map(reservation -> {
157+
Applicant applicant = reservation.getApplicant();
158+
return InterviewReservationApplicantResponseDto.builder()
159+
.applicantId(applicant.getId())
160+
.applicantName(applicant.getName())
161+
.studentNo(applicant.getStudentNo())
162+
.contact(applicant.getContact())
163+
.email(applicant.getEmail())
164+
.activityWish(applicant.getActivityWish())
165+
.reasonForApply(applicant.getReasonForApply())
166+
.build();
167+
})
168+
.collect(Collectors.toList());
169+
}
170+
145171
}

src/main/java/dmu/dasom/api/domain/recruit/controller/RecruitController.java

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,7 @@
33
import dmu.dasom.api.domain.applicant.dto.ApplicantCreateRequestDto;
44
import dmu.dasom.api.domain.applicant.service.ApplicantService;
55
import dmu.dasom.api.domain.common.exception.ErrorResponse;
6-
import dmu.dasom.api.domain.interview.dto.InterviewReservationRequestDto;
7-
import dmu.dasom.api.domain.interview.dto.InterviewSlotCreateRequestDto;
8-
import dmu.dasom.api.domain.interview.dto.InterviewSlotRequestDto;
9-
import dmu.dasom.api.domain.interview.dto.InterviewSlotResponseDto;
6+
import dmu.dasom.api.domain.interview.dto.*;
107
import dmu.dasom.api.domain.interview.service.InterviewService;
118
import dmu.dasom.api.domain.recruit.dto.ResultCheckRequestDto;
129
import dmu.dasom.api.domain.recruit.dto.ResultCheckResponseDto;
@@ -128,4 +125,10 @@ public ResponseEntity<List<InterviewSlotResponseDto>> getAllInterviewSlots() {
128125
return ResponseEntity.ok(allSlots);
129126
}
130127

128+
@GetMapping("/interview/applicants")
129+
public ResponseEntity<List<InterviewReservationApplicantResponseDto>> getAllInterviewApplicants() {
130+
List<InterviewReservationApplicantResponseDto> applicants = interviewService.getAllInterviewApplicants();
131+
return ResponseEntity.ok(applicants);
132+
}
133+
131134
}

0 commit comments

Comments
 (0)