diff --git a/src/main/java/ceos/backend/domain/application/domain/Application.java b/src/main/java/ceos/backend/domain/application/domain/Application.java index 3f601655..d99883cc 100644 --- a/src/main/java/ceos/backend/domain/application/domain/Application.java +++ b/src/main/java/ceos/backend/domain/application/domain/Application.java @@ -35,8 +35,8 @@ public class Application extends BaseEntity { private String interviewDatetime; @NotNull - @ColumnDefault("false") - private boolean interviewCheck; + @Enumerated(EnumType.STRING) + private AvailableCheck interviewCheck = AvailableCheck.UNDECIDED; @Size(max = 100) private String unableReason; @@ -46,8 +46,8 @@ public class Application extends BaseEntity { private Pass documentPass; @NotNull - @ColumnDefault("false") - private boolean finalCheck; // 활동 가능 여부 + @Enumerated(EnumType.STRING) + private AvailableCheck finalCheck = AvailableCheck.UNDECIDED; // 활동 가능 여부 @NotNull @Enumerated(EnumType.STRING) @@ -86,13 +86,13 @@ public void addApplicationInterviewList(List applicationIn this.applicationInterviews = applicationInterviews; } - public void updateInterviewCheck(boolean check) { + public void updateInterviewCheck(AvailableCheck check) { this.interviewCheck = check; } public void updateUnableReason(String reason) { this.unableReason = reason; } - public void updateFinalCheck(boolean check) { + public void updateFinalCheck(AvailableCheck check) { this.finalCheck = check; } @@ -127,13 +127,13 @@ public void validateFinalPass() { } public void validateNotFinalCheck() { - if (this.isFinalCheck()) { + if (this.finalCheck != AvailableCheck.UNDECIDED) { throw AlreadyCheckFinal.EXCEPTION; } } public void validateNotInterviewCheck() { - if (this.isInterviewCheck()) { + if (this.interviewCheck != AvailableCheck.UNDECIDED) { throw AlreadyCheckInterview.EXCEPTION; } } diff --git a/src/main/java/ceos/backend/domain/application/domain/AvailableCheck.java b/src/main/java/ceos/backend/domain/application/domain/AvailableCheck.java new file mode 100644 index 00000000..3aff7970 --- /dev/null +++ b/src/main/java/ceos/backend/domain/application/domain/AvailableCheck.java @@ -0,0 +1,26 @@ +package ceos.backend.domain.application.domain; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonValue; +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +import java.util.stream.Stream; + +@Getter +@RequiredArgsConstructor +public enum AvailableCheck { + UNDECIDED("미입력"), + AVAILABLE("가능"), + UNAVAILABLE("불가능"); + + @JsonValue private final String check; + + @JsonCreator + public static AvailableCheck parsing(String inputValue) { + return Stream.of(AvailableCheck.values()) + .filter(category -> category.getCheck().equals(inputValue)) + .findFirst() + .orElse(null); + } +} diff --git a/src/main/java/ceos/backend/domain/application/dto/request/UpdateAttendanceRequest.java b/src/main/java/ceos/backend/domain/application/dto/request/UpdateAttendanceRequest.java index 0b319ffe..9cf45043 100644 --- a/src/main/java/ceos/backend/domain/application/dto/request/UpdateAttendanceRequest.java +++ b/src/main/java/ceos/backend/domain/application/dto/request/UpdateAttendanceRequest.java @@ -1,15 +1,16 @@ package ceos.backend.domain.application.dto.request; +import ceos.backend.domain.application.domain.AvailableCheck; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotNull; import lombok.Getter; @Getter public class UpdateAttendanceRequest { - @Schema(defaultValue = "true", description = "참여 가능 여부") + @Schema(defaultValue = "AVAILABLE", description = "참여 가능 여부") @NotNull - private boolean available; + private AvailableCheck available; @Schema(defaultValue = "null", description = "참여 불가능 사유") private String reason; diff --git a/src/main/java/ceos/backend/domain/application/dto/response/GetFinalAvailability.java b/src/main/java/ceos/backend/domain/application/dto/response/GetFinalAvailability.java index aec81cd2..55b46e50 100644 --- a/src/main/java/ceos/backend/domain/application/dto/response/GetFinalAvailability.java +++ b/src/main/java/ceos/backend/domain/application/dto/response/GetFinalAvailability.java @@ -1,24 +1,25 @@ package ceos.backend.domain.application.dto.response; import ceos.backend.domain.application.domain.Application; +import ceos.backend.domain.application.domain.AvailableCheck; import lombok.Builder; import lombok.Getter; @Getter @Builder public class GetFinalAvailability { - private boolean finalAvailability; // 활동 가능 여부 + private AvailableCheck finalAvailability; // 활동 가능 여부 private String reason; // 활동 불가능 사유 @Builder - public GetFinalAvailability(boolean finalCheck, String reason) { + public GetFinalAvailability(AvailableCheck finalCheck, String reason) { this.finalAvailability = finalCheck; this.reason = reason; } public static GetFinalAvailability of(Application application) { return GetFinalAvailability.builder() - .finalAvailability(application.isFinalCheck()) + .finalAvailability(application.getFinalCheck()) .reason(application.getUnableReason()) .build(); } diff --git a/src/main/java/ceos/backend/domain/application/dto/response/GetInterviewAvailability.java b/src/main/java/ceos/backend/domain/application/dto/response/GetInterviewAvailability.java index 8ff16101..849c9bdc 100644 --- a/src/main/java/ceos/backend/domain/application/dto/response/GetInterviewAvailability.java +++ b/src/main/java/ceos/backend/domain/application/dto/response/GetInterviewAvailability.java @@ -1,24 +1,25 @@ package ceos.backend.domain.application.dto.response; import ceos.backend.domain.application.domain.Application; +import ceos.backend.domain.application.domain.AvailableCheck; import lombok.Builder; import lombok.Getter; @Getter @Builder public class GetInterviewAvailability { - private boolean interviewAvailability; // 참여 가능 여부 + private AvailableCheck interviewAvailability; // 참여 가능 여부 private String reason; // 참여 불가능 사유 @Builder - public GetInterviewAvailability(boolean interviewCheck, String reason) { + public GetInterviewAvailability(AvailableCheck interviewCheck, String reason) { this.interviewAvailability = interviewCheck; this.reason = reason; } public static GetInterviewAvailability of(Application application) { return GetInterviewAvailability.builder() - .interviewAvailability(application.isInterviewCheck()) + .interviewAvailability(application.getInterviewCheck()) .reason(application.getUnableReason()) .build(); } diff --git a/src/main/java/ceos/backend/domain/application/dto/response/GetResultResponse.java b/src/main/java/ceos/backend/domain/application/dto/response/GetResultResponse.java index bc1afa51..87b606fd 100644 --- a/src/main/java/ceos/backend/domain/application/dto/response/GetResultResponse.java +++ b/src/main/java/ceos/backend/domain/application/dto/response/GetResultResponse.java @@ -2,6 +2,7 @@ import ceos.backend.domain.application.domain.Application; +import ceos.backend.domain.application.domain.AvailableCheck; import ceos.backend.domain.application.domain.Pass; import ceos.backend.domain.recruitment.domain.Recruitment; import ceos.backend.global.common.dto.ParsedDuration; @@ -28,7 +29,7 @@ public class GetResultResponse { private String openChatUrl; - private boolean attendanceStatus; + private AvailableCheck attendanceStatus; @Builder private GetResultResponse( @@ -38,7 +39,7 @@ private GetResultResponse( Part part, ParsedDuration parsedDuration, LocalDate otDate, - boolean attendanceStatus, + AvailableCheck attendanceStatus, String openChatUrl) { this.pass = pass; this.generation = generation; @@ -65,7 +66,7 @@ public static GetResultResponse toDocumentResult( .part(application.getApplicationDetail().getPart()) .parsedDuration(duration) .otDate(recruitment.getOtDate()) - .attendanceStatus(application.isInterviewCheck()) + .attendanceStatus(application.getInterviewCheck()) .openChatUrl(recruitment.getOpenChatUrl()) .build(); } @@ -81,7 +82,7 @@ public static GetResultResponse toFinalResult( ParsedDurationConvertor.parsingDuration(application.getInterviewDatetime())) .otDate(recruitment.getOtDate()) .openChatUrl(recruitment.getOpenChatUrl()) - .attendanceStatus(application.isFinalCheck()) + .attendanceStatus(application.getFinalCheck()) .build(); } } diff --git a/src/main/java/ceos/backend/domain/application/service/ApplicationService.java b/src/main/java/ceos/backend/domain/application/service/ApplicationService.java index 245c614f..e9499816 100644 --- a/src/main/java/ceos/backend/domain/application/service/ApplicationService.java +++ b/src/main/java/ceos/backend/domain/application/service/ApplicationService.java @@ -1,13 +1,7 @@ package ceos.backend.domain.application.service; -import ceos.backend.domain.application.domain.Application; -import ceos.backend.domain.application.domain.ApplicationAnswer; -import ceos.backend.domain.application.domain.ApplicationInterview; -import ceos.backend.domain.application.domain.ApplicationQuestion; -import ceos.backend.domain.application.domain.ApplicationQuestionDetail; -import ceos.backend.domain.application.domain.Interview; -import ceos.backend.domain.application.domain.Pass; +import ceos.backend.domain.application.domain.*; import ceos.backend.domain.application.dto.request.CreateApplicationRequest; import ceos.backend.domain.application.dto.request.UpdateApplicationQuestion; import ceos.backend.domain.application.dto.request.UpdateAttendanceRequest; @@ -42,6 +36,9 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import static ceos.backend.domain.application.domain.AvailableCheck.AVAILABLE; +import static ceos.backend.domain.application.domain.AvailableCheck.UNAVAILABLE; + @Service @RequiredArgsConstructor public class ApplicationService { @@ -162,9 +159,10 @@ public void updateInterviewAttendance( applicationHelper.getApplicationByUuidAndEmailForUpdate(uuid, email); applicationValidator.validateApplicantInterviewCheckStatus(application); // 서류합격, 인터뷰 체크 검증 - if (request.isAvailable()) { - application.updateInterviewCheck(true); + if (request.getAvailable() == AVAILABLE) { + application.updateInterviewCheck(AVAILABLE); } else { + application.updateInterviewCheck(UNAVAILABLE); application.updateUnableReason(request.getReason()); applicationHelper.sendSlackUnableReasonMessage(application, request, false); } @@ -191,9 +189,10 @@ public void updateParticipationAvailability( applicationHelper.getApplicationByUuidAndEmailForUpdate(uuid, email); applicationValidator.validateApplicantActivityCheckStatus(application); // 유저 확인 여부 검증 - if (request.isAvailable()) { - application.updateFinalCheck(true); + if (request.getAvailable() == AVAILABLE) { + application.updateFinalCheck(AVAILABLE); } else { + application.updateFinalCheck(UNAVAILABLE); application.updateUnableReason(request.getReason()); applicationHelper.sendSlackUnableReasonMessage(application, request, true); } diff --git a/src/main/java/ceos/backend/domain/application/vo/ApplicationBriefInfoVo.java b/src/main/java/ceos/backend/domain/application/vo/ApplicationBriefInfoVo.java index bc7d6279..e84be1dc 100644 --- a/src/main/java/ceos/backend/domain/application/vo/ApplicationBriefInfoVo.java +++ b/src/main/java/ceos/backend/domain/application/vo/ApplicationBriefInfoVo.java @@ -3,6 +3,7 @@ import ceos.backend.domain.application.domain.ApplicantInfo; import ceos.backend.domain.application.domain.Application; +import ceos.backend.domain.application.domain.AvailableCheck; import ceos.backend.domain.application.domain.Pass; import ceos.backend.global.common.dto.ParsedDuration; import ceos.backend.global.common.entity.Part; @@ -18,6 +19,8 @@ public class ApplicationBriefInfoVo { private Long id; private Pass documentPass; private Pass finalPass; + private AvailableCheck interviewCheck; + private AvailableCheck finalCheck; @JsonUnwrapped private ParsedDuration interviewTime; @@ -28,13 +31,17 @@ private ApplicationBriefInfoVo( Part part, Pass documentPass, Pass finalPass, - ParsedDuration interviewTime) { + ParsedDuration interviewTime, + AvailableCheck interviewCheck, + AvailableCheck finalCheck) { this.applicantInfo = applicantInfo; this.id = id; this.part = part; this.documentPass = documentPass; this.finalPass = finalPass; this.interviewTime = interviewTime; + this.interviewCheck = interviewCheck; + this.finalCheck = finalCheck; } public static ApplicationBriefInfoVo of(Application application, ParsedDuration interviewTime) { @@ -45,6 +52,8 @@ public static ApplicationBriefInfoVo of(Application application, ParsedDuration .documentPass(application.getDocumentPass()) .finalPass(application.getFinalPass()) .interviewTime(interviewTime) + .interviewCheck(application.getInterviewCheck()) + .finalCheck(application.getFinalCheck()) .build(); } } diff --git a/src/main/java/ceos/backend/domain/subscriber/domain/Subscriber.java b/src/main/java/ceos/backend/domain/subscriber/domain/Subscriber.java index 6b466de5..313b6965 100644 --- a/src/main/java/ceos/backend/domain/subscriber/domain/Subscriber.java +++ b/src/main/java/ceos/backend/domain/subscriber/domain/Subscriber.java @@ -23,15 +23,20 @@ public class Subscriber extends BaseEntity { @Size(max = 255) private String email; + @Size(max = 255) + private String phoneNum; + // 생성자 @Builder - private Subscriber(String email) { + private Subscriber(String email, String phoneNum) { this.email = email; + this.phoneNum = phoneNum; } - public static Subscriber from(String email) { + public static Subscriber from(String email, String phoneNum) { return Subscriber.builder() .email(email) + .phoneNum(phoneNum) .build(); } } diff --git a/src/main/java/ceos/backend/domain/subscriber/dto/request/SubscribeRequest.java b/src/main/java/ceos/backend/domain/subscriber/dto/request/SubscribeRequest.java index 0c9fb0e9..9d62158d 100644 --- a/src/main/java/ceos/backend/domain/subscriber/dto/request/SubscribeRequest.java +++ b/src/main/java/ceos/backend/domain/subscriber/dto/request/SubscribeRequest.java @@ -11,4 +11,7 @@ public class SubscribeRequest { @Schema(defaultValue = "ceos@ceos-sinchon.com", description = "이메일") @ValidEmail private String email; + + @Schema(defaultValue = "010-1234-1234", description = "전화번호") + private String phoneNum; } diff --git a/src/main/java/ceos/backend/domain/subscriber/service/SubscriberService.java b/src/main/java/ceos/backend/domain/subscriber/service/SubscriberService.java index 47068c35..1fba5b86 100644 --- a/src/main/java/ceos/backend/domain/subscriber/service/SubscriberService.java +++ b/src/main/java/ceos/backend/domain/subscriber/service/SubscriberService.java @@ -29,7 +29,7 @@ public void subscribeMail(SubscribeRequest subscribeRequest) { //이메일 중복 검증 subscriberHelper.validateEmail(subscribeRequest.getEmail()); - Subscriber subscriber = Subscriber.from(subscribeRequest.getEmail()); + Subscriber subscriber = Subscriber.from(subscribeRequest.getEmail(), subscribeRequest.getPhoneNum()); subscriberRepository.save(subscriber); }