Skip to content
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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)
Expand Down Expand Up @@ -86,13 +86,13 @@ public void addApplicationInterviewList(List<ApplicationInterview> 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;
}

Expand Down Expand Up @@ -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;
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -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);
}
}
Original file line number Diff line number Diff line change
@@ -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;
Expand Down
Original file line number Diff line number Diff line change
@@ -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();
}
Expand Down
Original file line number Diff line number Diff line change
@@ -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();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -28,7 +29,7 @@ public class GetResultResponse {

private String openChatUrl;

private boolean attendanceStatus;
private AvailableCheck attendanceStatus;

@Builder
private GetResultResponse(
Expand All @@ -38,7 +39,7 @@ private GetResultResponse(
Part part,
ParsedDuration parsedDuration,
LocalDate otDate,
boolean attendanceStatus,
AvailableCheck attendanceStatus,
String openChatUrl) {
this.pass = pass;
this.generation = generation;
Expand All @@ -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();
}
Expand All @@ -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();
}
}
Original file line number Diff line number Diff line change
@@ -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;
Expand Down Expand Up @@ -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 {
Expand Down Expand Up @@ -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);
}
Expand All @@ -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);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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;

Expand All @@ -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) {
Expand All @@ -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();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}

Expand Down