Skip to content

Commit 4d257d7

Browse files
committed
Merge remote-tracking branch 'origin/dev' into dev
2 parents e7702d5 + 1ca54da commit 4d257d7

8 files changed

Lines changed: 88 additions & 42 deletions

File tree

src/main/java/ceos/backend/domain/application/domain/Application.java

Lines changed: 22 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -6,17 +6,16 @@
66
import ceos.backend.global.common.entity.BaseEntity;
77
import jakarta.persistence.*;
88
import jakarta.validation.constraints.NotNull;
9-
import java.util.ArrayList;
10-
import java.util.List;
11-
129
import jakarta.validation.constraints.Size;
1310
import lombok.AccessLevel;
1411
import lombok.Builder;
1512
import lombok.Getter;
1613
import lombok.NoArgsConstructor;
17-
import org.hibernate.annotations.ColumnDefault;
1814
import org.hibernate.annotations.DynamicInsert;
1915

16+
import java.util.ArrayList;
17+
import java.util.List;
18+
2019
@DynamicInsert
2120
@Getter
2221
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@@ -35,19 +34,22 @@ public class Application extends BaseEntity {
3534
private String interviewDatetime;
3635

3736
@NotNull
38-
@ColumnDefault("false")
39-
private boolean interviewCheck;
37+
@Enumerated(EnumType.STRING)
38+
private AvailableCheck interviewCheck = AvailableCheck.UNDECIDED;
4039

4140
@Size(max = 100)
42-
private String unableReason;
41+
private String interviewUnableReason;
4342

4443
@NotNull
4544
@Enumerated(EnumType.STRING)
4645
private Pass documentPass;
4746

4847
@NotNull
49-
@ColumnDefault("false")
50-
private boolean finalCheck; // 활동 가능 여부
48+
@Enumerated(EnumType.STRING)
49+
private AvailableCheck finalCheck = AvailableCheck.UNDECIDED; // 활동 가능 여부
50+
51+
@Size(max = 100)
52+
private String finalUnableReason;
5153

5254
@NotNull
5355
@Enumerated(EnumType.STRING)
@@ -86,16 +88,22 @@ public void addApplicationInterviewList(List<ApplicationInterview> applicationIn
8688
this.applicationInterviews = applicationInterviews;
8789
}
8890

89-
public void updateInterviewCheck(boolean check) {
91+
public void updateInterviewCheck(AvailableCheck check) {
9092
this.interviewCheck = check;
9193
}
9294

93-
public void updateUnableReason(String reason) { this.unableReason = reason; }
95+
public void updateInterviewUnableReason(String reason) {
96+
this.interviewUnableReason = reason;
97+
}
9498

95-
public void updateFinalCheck(boolean check) {
99+
public void updateFinalCheck(AvailableCheck check) {
96100
this.finalCheck = check;
97101
}
98102

103+
public void updateFinalUnableReason(String reason) {
104+
this.finalUnableReason = reason;
105+
}
106+
99107
public void updateDocumentPass(Pass pass) {
100108
if (this.documentPass == pass) {
101109
throw SamePassStatus.EXCEPTION;
@@ -127,13 +135,13 @@ public void validateFinalPass() {
127135
}
128136

129137
public void validateNotFinalCheck() {
130-
if (this.isFinalCheck()) {
138+
if (this.finalCheck != AvailableCheck.UNDECIDED) {
131139
throw AlreadyCheckFinal.EXCEPTION;
132140
}
133141
}
134142

135143
public void validateNotInterviewCheck() {
136-
if (this.isInterviewCheck()) {
144+
if (this.interviewCheck != AvailableCheck.UNDECIDED) {
137145
throw AlreadyCheckInterview.EXCEPTION;
138146
}
139147
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package ceos.backend.domain.application.domain;
2+
3+
import com.fasterxml.jackson.annotation.JsonCreator;
4+
import com.fasterxml.jackson.annotation.JsonValue;
5+
import lombok.Getter;
6+
import lombok.RequiredArgsConstructor;
7+
8+
import java.util.stream.Stream;
9+
10+
@Getter
11+
@RequiredArgsConstructor
12+
public enum AvailableCheck {
13+
UNDECIDED("미입력"),
14+
AVAILABLE("가능"),
15+
UNAVAILABLE("불가능");
16+
17+
@JsonValue private final String check;
18+
19+
@JsonCreator
20+
public static AvailableCheck parsing(String inputValue) {
21+
return Stream.of(AvailableCheck.values())
22+
.filter(category -> category.getCheck().equals(inputValue))
23+
.findFirst()
24+
.orElse(null);
25+
}
26+
}

src/main/java/ceos/backend/domain/application/dto/request/UpdateAttendanceRequest.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,16 @@
11
package ceos.backend.domain.application.dto.request;
22

33

4+
import ceos.backend.domain.application.domain.AvailableCheck;
45
import io.swagger.v3.oas.annotations.media.Schema;
56
import jakarta.validation.constraints.NotNull;
67
import lombok.Getter;
78

89
@Getter
910
public class UpdateAttendanceRequest {
10-
@Schema(defaultValue = "true", description = "참여 가능 여부")
11+
@Schema(defaultValue = "AVAILABLE", description = "참여 가능 여부")
1112
@NotNull
12-
private boolean available;
13+
private AvailableCheck available;
1314

1415
@Schema(defaultValue = "null", description = "참여 불가능 사유")
1516
private String reason;

src/main/java/ceos/backend/domain/application/dto/response/GetFinalAvailability.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,26 @@
11
package ceos.backend.domain.application.dto.response;
22

33
import ceos.backend.domain.application.domain.Application;
4+
import ceos.backend.domain.application.domain.AvailableCheck;
45
import lombok.Builder;
56
import lombok.Getter;
67

78
@Getter
89
@Builder
910
public class GetFinalAvailability {
10-
private boolean finalAvailability; // 활동 가능 여부
11+
private AvailableCheck finalAvailability; // 활동 가능 여부
1112
private String reason; // 활동 불가능 사유
1213

1314
@Builder
14-
public GetFinalAvailability(boolean finalCheck, String reason) {
15+
public GetFinalAvailability(AvailableCheck finalCheck, String reason) {
1516
this.finalAvailability = finalCheck;
1617
this.reason = reason;
1718
}
1819

1920
public static GetFinalAvailability of(Application application) {
2021
return GetFinalAvailability.builder()
21-
.finalAvailability(application.isFinalCheck())
22-
.reason(application.getUnableReason())
22+
.finalAvailability(application.getFinalCheck())
23+
.reason(application.getFinalUnableReason())
2324
.build();
2425
}
2526

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,26 @@
11
package ceos.backend.domain.application.dto.response;
22

33
import ceos.backend.domain.application.domain.Application;
4+
import ceos.backend.domain.application.domain.AvailableCheck;
45
import lombok.Builder;
56
import lombok.Getter;
67

78
@Getter
89
@Builder
910
public class GetInterviewAvailability {
10-
private boolean interviewAvailability; // 참여 가능 여부
11+
private AvailableCheck interviewAvailability; // 참여 가능 여부
1112
private String reason; // 참여 불가능 사유
1213

1314
@Builder
14-
public GetInterviewAvailability(boolean interviewCheck, String reason) {
15+
public GetInterviewAvailability(AvailableCheck interviewCheck, String reason) {
1516
this.interviewAvailability = interviewCheck;
1617
this.reason = reason;
1718
}
1819

1920
public static GetInterviewAvailability of(Application application) {
2021
return GetInterviewAvailability.builder()
21-
.interviewAvailability(application.isInterviewCheck())
22-
.reason(application.getUnableReason())
22+
.interviewAvailability(application.getInterviewCheck())
23+
.reason(application.getInterviewUnableReason())
2324
.build();
2425
}
2526
}

src/main/java/ceos/backend/domain/application/dto/response/GetResultResponse.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33

44
import ceos.backend.domain.application.domain.Application;
5+
import ceos.backend.domain.application.domain.AvailableCheck;
56
import ceos.backend.domain.application.domain.Pass;
67
import ceos.backend.domain.recruitment.domain.Recruitment;
78
import ceos.backend.global.common.dto.ParsedDuration;
@@ -28,7 +29,7 @@ public class GetResultResponse {
2829

2930
private String openChatUrl;
3031

31-
private boolean attendanceStatus;
32+
private AvailableCheck attendanceStatus;
3233

3334
@Builder
3435
private GetResultResponse(
@@ -38,7 +39,7 @@ private GetResultResponse(
3839
Part part,
3940
ParsedDuration parsedDuration,
4041
LocalDate otDate,
41-
boolean attendanceStatus,
42+
AvailableCheck attendanceStatus,
4243
String openChatUrl) {
4344
this.pass = pass;
4445
this.generation = generation;
@@ -65,7 +66,7 @@ public static GetResultResponse toDocumentResult(
6566
.part(application.getApplicationDetail().getPart())
6667
.parsedDuration(duration)
6768
.otDate(recruitment.getOtDate())
68-
.attendanceStatus(application.isInterviewCheck())
69+
.attendanceStatus(application.getInterviewCheck())
6970
.openChatUrl(recruitment.getOpenChatUrl())
7071
.build();
7172
}
@@ -81,7 +82,7 @@ public static GetResultResponse toFinalResult(
8182
ParsedDurationConvertor.parsingDuration(application.getInterviewDatetime()))
8283
.otDate(recruitment.getOtDate())
8384
.openChatUrl(recruitment.getOpenChatUrl())
84-
.attendanceStatus(application.isFinalCheck())
85+
.attendanceStatus(application.getFinalCheck())
8586
.build();
8687
}
8788
}

src/main/java/ceos/backend/domain/application/service/ApplicationService.java

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,7 @@
11
package ceos.backend.domain.application.service;
22

33

4-
import ceos.backend.domain.application.domain.Application;
5-
import ceos.backend.domain.application.domain.ApplicationAnswer;
6-
import ceos.backend.domain.application.domain.ApplicationInterview;
7-
import ceos.backend.domain.application.domain.ApplicationQuestion;
8-
import ceos.backend.domain.application.domain.ApplicationQuestionDetail;
9-
import ceos.backend.domain.application.domain.Interview;
10-
import ceos.backend.domain.application.domain.Pass;
4+
import ceos.backend.domain.application.domain.*;
115
import ceos.backend.domain.application.dto.request.CreateApplicationRequest;
126
import ceos.backend.domain.application.dto.request.UpdateApplicationQuestion;
137
import ceos.backend.domain.application.dto.request.UpdateAttendanceRequest;
@@ -42,6 +36,9 @@
4236
import org.springframework.stereotype.Service;
4337
import org.springframework.transaction.annotation.Transactional;
4438

39+
import static ceos.backend.domain.application.domain.AvailableCheck.AVAILABLE;
40+
import static ceos.backend.domain.application.domain.AvailableCheck.UNAVAILABLE;
41+
4542
@Service
4643
@RequiredArgsConstructor
4744
public class ApplicationService {
@@ -162,10 +159,11 @@ public void updateInterviewAttendance(
162159
applicationHelper.getApplicationByUuidAndEmailForUpdate(uuid, email);
163160
applicationValidator.validateApplicantInterviewCheckStatus(application); // 서류합격, 인터뷰 체크 검증
164161

165-
if (request.isAvailable()) {
166-
application.updateInterviewCheck(true);
162+
if (request.getAvailable() == AVAILABLE) {
163+
application.updateInterviewCheck(AVAILABLE);
167164
} else {
168-
application.updateUnableReason(request.getReason());
165+
application.updateInterviewCheck(UNAVAILABLE);
166+
application.updateInterviewUnableReason(request.getReason());
169167
applicationHelper.sendSlackUnableReasonMessage(application, request, false);
170168
}
171169
}
@@ -191,10 +189,11 @@ public void updateParticipationAvailability(
191189
applicationHelper.getApplicationByUuidAndEmailForUpdate(uuid, email);
192190
applicationValidator.validateApplicantActivityCheckStatus(application); // 유저 확인 여부 검증
193191

194-
if (request.isAvailable()) {
195-
application.updateFinalCheck(true);
192+
if (request.getAvailable() == AVAILABLE) {
193+
application.updateFinalCheck(AVAILABLE);
196194
} else {
197-
application.updateUnableReason(request.getReason());
195+
application.updateFinalCheck(UNAVAILABLE);
196+
application.updateFinalUnableReason(request.getReason());
198197
applicationHelper.sendSlackUnableReasonMessage(application, request, true);
199198
}
200199
}

src/main/java/ceos/backend/domain/application/vo/ApplicationBriefInfoVo.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44
import ceos.backend.domain.application.domain.ApplicantInfo;
55
import ceos.backend.domain.application.domain.Application;
6+
import ceos.backend.domain.application.domain.AvailableCheck;
67
import ceos.backend.domain.application.domain.Pass;
78
import ceos.backend.global.common.dto.ParsedDuration;
89
import ceos.backend.global.common.entity.Part;
@@ -18,6 +19,8 @@ public class ApplicationBriefInfoVo {
1819
private Long id;
1920
private Pass documentPass;
2021
private Pass finalPass;
22+
private AvailableCheck interviewCheck;
23+
private AvailableCheck finalCheck;
2124

2225
@JsonUnwrapped private ParsedDuration interviewTime;
2326

@@ -28,13 +31,17 @@ private ApplicationBriefInfoVo(
2831
Part part,
2932
Pass documentPass,
3033
Pass finalPass,
31-
ParsedDuration interviewTime) {
34+
ParsedDuration interviewTime,
35+
AvailableCheck interviewCheck,
36+
AvailableCheck finalCheck) {
3237
this.applicantInfo = applicantInfo;
3338
this.id = id;
3439
this.part = part;
3540
this.documentPass = documentPass;
3641
this.finalPass = finalPass;
3742
this.interviewTime = interviewTime;
43+
this.interviewCheck = interviewCheck;
44+
this.finalCheck = finalCheck;
3845
}
3946

4047
public static ApplicationBriefInfoVo of(Application application, ParsedDuration interviewTime) {
@@ -45,6 +52,8 @@ public static ApplicationBriefInfoVo of(Application application, ParsedDuration
4552
.documentPass(application.getDocumentPass())
4653
.finalPass(application.getFinalPass())
4754
.interviewTime(interviewTime)
55+
.interviewCheck(application.getInterviewCheck())
56+
.finalCheck(application.getFinalCheck())
4857
.build();
4958
}
5059
}

0 commit comments

Comments
 (0)