Skip to content

Commit 64e7268

Browse files
committed
fix: 서류 지원결과와 최종 합격 결과 API 하나의 메소드에서 지원되게 수정 MailType 열거형 추가
1 parent 6bc4251 commit 64e7268

File tree

6 files changed

+59
-72
lines changed

6 files changed

+59
-72
lines changed

src/main/java/dmu/dasom/api/domain/applicant/repository/ApplicantRepository.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ public interface ApplicantRepository extends JpaRepository<Applicant, Long> {
1818

1919
// 상태별 지원자 조회
2020
List<Applicant> findByStatus(ApplicantStatus status);
21+
List<Applicant> findByStatusIn(List<ApplicantStatus> statuses);
2122

2223
Optional<Applicant> findByStudentNo(final String studentNo);
2324

src/main/java/dmu/dasom/api/domain/applicant/service/ApplicantService.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import dmu.dasom.api.domain.applicant.dto.ApplicantDetailsResponseDto;
55
import dmu.dasom.api.domain.applicant.dto.ApplicantResponseDto;
66
import dmu.dasom.api.domain.applicant.dto.ApplicantStatusUpdateRequestDto;
7+
import dmu.dasom.api.domain.email.enums.MailType;
78
import dmu.dasom.api.global.dto.PageResponse;
89

910
public interface ApplicantService {
@@ -16,8 +17,6 @@ public interface ApplicantService {
1617

1718
ApplicantDetailsResponseDto updateApplicantStatus(final Long id, final ApplicantStatusUpdateRequestDto request);
1819

19-
void sendDocumentPassEmailsToApplicants();
20-
21-
void sendFinalPassEmailsToDocumentPassApplicants();
20+
void sendEmailsToApplicants(MailType mailType);
2221

2322
}

src/main/java/dmu/dasom/api/domain/applicant/service/ApplicantServiceImpl.java

Lines changed: 19 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import dmu.dasom.api.domain.applicant.repository.ApplicantRepository;
1010
import dmu.dasom.api.domain.common.exception.CustomException;
1111
import dmu.dasom.api.domain.common.exception.ErrorCode;
12+
import dmu.dasom.api.domain.email.enums.MailType;
1213
import dmu.dasom.api.domain.email.service.EmailService;
1314
import dmu.dasom.api.global.dto.PageResponse;
1415
import jakarta.mail.MessagingException;
@@ -81,56 +82,35 @@ public ApplicantDetailsResponseDto updateApplicantStatus(final Long id, final Ap
8182
return applicant.toApplicantDetailsResponse();
8283
}
8384

84-
// 지원자 이메일 보내기
8585
@Override
86-
public void sendDocumentPassEmailsToApplicants(){
87-
List<Applicant> applicants = applicantRepository.findAll();
88-
89-
if(applicants.isEmpty()) {
90-
throw new CustomException(ErrorCode.EMPTY_RESULT);
91-
}
92-
93-
String subject = "다솜 서류 지원 결과";
94-
95-
for(Applicant applicant : applicants){
96-
try {
97-
emailService.sendEmail(
98-
applicant.getEmail(),
99-
subject,
100-
"document-pass-template",
101-
applicant.getName()
86+
public void sendEmailsToApplicants(MailType mailType) {
87+
List<Applicant> applicants;
88+
89+
// MailType에 따라 지원자 조회
90+
switch (mailType) {
91+
case DOCUMENT_RESULT:
92+
applicants = applicantRepository.findAll();
93+
break;
94+
case FINAL_RESULT:
95+
applicants = applicantRepository.findByStatusIn(
96+
List.of(ApplicantStatus.INTERVIEW_PASSED,
97+
ApplicantStatus.INTERVIEW_PASSED)
10298
);
103-
log.info("이메일 전송 완료: {}", applicant.getEmail());
104-
} catch (MessagingException e) {
105-
log.error("이메일 전송 실패: {}", applicant.getEmail(), e);
106-
}
107-
}
108-
}
109-
110-
@Override
111-
public void sendFinalPassEmailsToDocumentPassApplicants() {
112-
List<Applicant> applicants = applicantRepository.findByStatus(ApplicantStatus.DOCUMENT_PASSED);
113-
114-
if(applicants.isEmpty()){
115-
throw new CustomException(ErrorCode.EMPTY_RESULT);
99+
break;
100+
default:
101+
throw new CustomException(ErrorCode.INTERNAL_SERVER_ERROR);
116102
}
117103

118-
String subject = "다솜 최종 합격 결과";
119104
for (Applicant applicant : applicants) {
120105
try {
121-
emailService.sendEmail(
122-
applicant.getEmail(),
123-
subject,
124-
"final-pass-template",
125-
applicant.getName()
126-
);
127-
log.info("이메일 전송 완료: {}", applicant.getEmail());
106+
emailService.sendEmail(applicant.getEmail(), applicant.getName(), mailType);
128107
} catch (MessagingException e) {
129-
log.error("이메일 전송 실패: {}", applicant.getEmail(), e);
108+
System.err.println("Failed to send email to: " + applicant.getEmail());
130109
}
131110
}
132111
}
133112

113+
134114
// Repository에서 ID로 지원자 조회
135115
private Applicant findById(final Long id) {
136116
return applicantRepository.findById(id)
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
package dmu.dasom.api.domain.email.enums;
2+
3+
public enum MailType {
4+
DOCUMENT_RESULT, // 서류 합격
5+
FINAL_RESULT // 최종 합격
6+
}

src/main/java/dmu/dasom/api/domain/email/service/EmailService.java

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,10 @@
11
package dmu.dasom.api.domain.email.service;
22

3+
import dmu.dasom.api.domain.email.enums.MailType;
34
import jakarta.mail.MessagingException;
45
import jakarta.mail.internet.MimeMessage;
56
import lombok.RequiredArgsConstructor;
6-
import org.springframework.beans.factory.annotation.Autowired;
77
import org.springframework.beans.factory.annotation.Value;
8-
import org.springframework.mail.SimpleMailMessage;
98
import org.springframework.mail.javamail.JavaMailSender;
109
import org.springframework.mail.javamail.MimeMessageHelper;
1110
import org.springframework.stereotype.Service;
@@ -21,7 +20,21 @@ public class EmailService {
2120
@Value("${spring.mail.username}")
2221
private String from;
2322

24-
public void sendEmail(String to, String subject, String templateName, String name) throws MessagingException {
23+
public void sendEmail(String to, String name, MailType mailType) throws MessagingException {
24+
// 메일 제목 및 템플릿 설정
25+
String subject;
26+
String templateName = switch (mailType) {
27+
case DOCUMENT_RESULT -> {
28+
subject = "서류 합격 안내";
29+
yield "document-pass-template";
30+
}
31+
case FINAL_RESULT -> {
32+
subject = "최종 합격 안내";
33+
yield "final-pass-template";
34+
}
35+
default -> throw new IllegalStateException("Unexpected value: " + mailType);
36+
};
37+
2538
// HTML 템플릿에 전달할 데이터 설정
2639
Context context = new Context();
2740
context.setVariable("name", name); // 지원자 이름 전달

src/main/java/dmu/dasom/api/global/admin/controller/AdminController.java

Lines changed: 15 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,10 @@
44
import dmu.dasom.api.domain.applicant.dto.ApplicantResponseDto;
55
import dmu.dasom.api.domain.applicant.dto.ApplicantStatusUpdateRequestDto;
66
import dmu.dasom.api.domain.applicant.service.ApplicantService;
7+
import dmu.dasom.api.domain.email.enums.MailType;
78
import dmu.dasom.api.global.dto.PageResponse;
89
import io.swagger.v3.oas.annotations.Operation;
10+
import io.swagger.v3.oas.annotations.Parameter;
911
import io.swagger.v3.oas.annotations.media.Content;
1012
import io.swagger.v3.oas.annotations.media.ExampleObject;
1113
import io.swagger.v3.oas.annotations.media.Schema;
@@ -79,7 +81,10 @@ public ResponseEntity<ApplicantDetailsResponseDto> updateApplicantStatus(@PathVa
7981
return ResponseEntity.ok(applicantService.updateApplicantStatus(id, request));
8082
}
8183

82-
@Operation(summary = "서류 결과 메일 전송")
84+
@Operation(
85+
summary = "메일 전송",
86+
description = "지원자들에게 서류 결과 또는 최종 결과 이메일을 발송합니다."
87+
)
8388
@ApiResponses(value = {
8489
@ApiResponse(responseCode = "200", description = "메일 전송 성공"),
8590
@ApiResponse(responseCode = "400", description = "잘못된 요청",
@@ -95,32 +100,15 @@ public ResponseEntity<ApplicantDetailsResponseDto> updateApplicantStatus(@PathVa
95100
)
96101
)
97102
})
98-
@PostMapping("/applicants/send-document-pass-email")
99-
public ResponseEntity<String> sendDocumentPassEmails() {
100-
applicantService.sendDocumentPassEmailsToApplicants();
101-
return ResponseEntity.ok("이메일 전송 성공");
102-
}
103-
104-
@Operation(summary = "최종 결과 메일 전송")
105-
@ApiResponses(value = {
106-
@ApiResponse(responseCode = "200", description = "메일 전송 성공"),
107-
@ApiResponse(responseCode = "400", description = "잘못된 요청",
108-
content = @Content(
109-
mediaType = "application/json",
110-
schema = @Schema(implementation = ErrorResponse.class),
111-
examples = {
112-
@ExampleObject(
113-
name = "전송 실패",
114-
value = "{ \"code\": \"C014\", \"message\": \"이메일 전송에 실패하였습니다.\" }"
115-
)
116-
}
117-
)
118-
)
119-
})
120-
@PostMapping("/applicants/send-final-pass-email")
121-
public ResponseEntity<String> sendFinalPassEmail(){
122-
applicantService.sendFinalPassEmailsToDocumentPassApplicants();
123-
return ResponseEntity.ok("이메일 전송 성공");
103+
@PostMapping("/applicants/send-email")
104+
public ResponseEntity<Void> sendEmailsToApplicants(
105+
@RequestParam
106+
@Parameter(description = "메일 발송 타입", examples = {
107+
@ExampleObject(name = "서류 합격 메일", value = "DOCUMENT_PASS"),
108+
@ExampleObject(name = "최종 결과 메일", value = "FINAL_RESULT")
109+
}) MailType mailType) {
110+
applicantService.sendEmailsToApplicants(mailType);
111+
return ResponseEntity.ok().build();
124112
}
125113

126114
}

0 commit comments

Comments
 (0)