Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -6,17 +6,16 @@
import ceos.backend.global.common.entity.BaseEntity;
import jakarta.persistence.*;
import jakarta.validation.constraints.NotNull;
import java.util.ArrayList;
import java.util.List;

import jakarta.validation.constraints.Size;
import lombok.AccessLevel;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import org.hibernate.annotations.ColumnDefault;
import org.hibernate.annotations.DynamicInsert;

import java.util.ArrayList;
import java.util.List;

@DynamicInsert
@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
Expand All @@ -35,19 +34,22 @@ 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;
private String interviewUnableReason;

@NotNull
@Enumerated(EnumType.STRING)
private Pass documentPass;

@NotNull
@ColumnDefault("false")
private boolean finalCheck; // ν™œλ™ κ°€λŠ₯ μ—¬λΆ€
@Enumerated(EnumType.STRING)
private AvailableCheck finalCheck = AvailableCheck.UNDECIDED; // ν™œλ™ κ°€λŠ₯ μ—¬λΆ€

@Size(max = 100)
private String finalUnableReason;

@NotNull
@Enumerated(EnumType.STRING)
Expand Down Expand Up @@ -86,16 +88,22 @@ 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 updateInterviewUnableReason(String reason) {
this.interviewUnableReason = reason;
}

public void updateFinalCheck(boolean check) {
public void updateFinalCheck(AvailableCheck check) {
this.finalCheck = check;
}

public void updateFinalUnableReason(String reason) {
this.finalUnableReason = reason;
}

public void updateDocumentPass(Pass pass) {
if (this.documentPass == pass) {
throw SamePassStatus.EXCEPTION;
Expand Down Expand Up @@ -127,13 +135,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,25 +1,26 @@
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())
.reason(application.getUnableReason())
.finalAvailability(application.getFinalCheck())
.reason(application.getFinalUnableReason())
.build();
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,25 +1,26 @@
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())
.reason(application.getUnableReason())
.interviewAvailability(application.getInterviewCheck())
.reason(application.getInterviewUnableReason())
.build();
}
}
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,10 +159,11 @@ 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.updateUnableReason(request.getReason());
application.updateInterviewCheck(UNAVAILABLE);
application.updateInterviewUnableReason(request.getReason());
applicationHelper.sendSlackUnableReasonMessage(application, request, false);
}
}
Expand All @@ -191,10 +189,11 @@ 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.updateUnableReason(request.getReason());
application.updateFinalCheck(UNAVAILABLE);
application.updateFinalUnableReason(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