From dbaca1837c84766d8014396c7663cce9107baa29 Mon Sep 17 00:00:00 2001 From: suhhyun <97878992+suhhyun524@users.noreply.github.com> Date: Tue, 21 Nov 2023 20:11:40 +0900 Subject: [PATCH] Main push (#160) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat : front dev url 추가 * add: 아이디어톤, 해커톤 날짜 추가 (#157) * [refact] 홈페이지 수정사항 반영 (#159) * [fix] 시간 단위 수정 및 테스트 코드 작성 * [fix] 서류합격 validation 수정 * [fix] Type 변경 --------- Co-authored-by: mirageoasis Co-authored-by: mirageoasis <37329424+mirageoasis@users.noreply.github.com> Co-authored-by: JeongHyun Lee <86969518+hyunihs@users.noreply.github.com> Co-authored-by: Jeonghyun Lee --- .../validator/ApplicationValidator.java | 3 +- .../application/vo/ApplicantInfoVo.java | 4 +- .../recruitment/domain/Recruitment.java | 46 +++++++++++-------- .../recruitment/dto/RecruitmentDTO.java | 33 ++++++++----- .../recruitment/dto/UserRecruitmentDTO.java | 33 ++++++++----- .../validator/RecruitmentValidator.java | 12 ++--- .../global/config/WebSecurityConfig.java | 8 +++- .../recruitments/domain/SettingsTest.java | 25 +++++----- 8 files changed, 100 insertions(+), 64 deletions(-) diff --git a/src/main/java/ceos/backend/domain/application/validator/ApplicationValidator.java b/src/main/java/ceos/backend/domain/application/validator/ApplicationValidator.java index f1e879b2..1590793f 100644 --- a/src/main/java/ceos/backend/domain/application/validator/ApplicationValidator.java +++ b/src/main/java/ceos/backend/domain/application/validator/ApplicationValidator.java @@ -1,5 +1,6 @@ package ceos.backend.domain.application.validator; +import static ceos.backend.domain.application.domain.Pass.PASS; import ceos.backend.domain.application.domain.Application; import ceos.backend.domain.application.domain.ApplicationQuestion; @@ -119,7 +120,7 @@ public void validateInterviewTimeExist(String uuid, String email) { () -> { throw ApplicantNotFound.EXCEPTION; }); - if (application.getInterviewDatetime() == null) { + if (application.getDocumentPass() == PASS && application.getInterviewDatetime() == null) { throw NotSetInterviewTime.EXCEPTION; } } diff --git a/src/main/java/ceos/backend/domain/application/vo/ApplicantInfoVo.java b/src/main/java/ceos/backend/domain/application/vo/ApplicantInfoVo.java index d8c50888..b4fde7b1 100644 --- a/src/main/java/ceos/backend/domain/application/vo/ApplicantInfoVo.java +++ b/src/main/java/ceos/backend/domain/application/vo/ApplicantInfoVo.java @@ -12,7 +12,7 @@ import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotEmpty; import jakarta.validation.constraints.NotNull; -import jakarta.validation.constraints.Positive; +import jakarta.validation.constraints.PositiveOrZero; import java.time.LocalDate; import lombok.Builder; import lombok.Getter; @@ -56,7 +56,7 @@ public class ApplicantInfoVo { @Schema(defaultValue = "99999999", description = "지원자 남은 학기 수") @NotNull(message = "지원자 남은 학기 수를 입력해주세요") - @Positive + @PositiveOrZero private int semestersLeftNumber; @Builder diff --git a/src/main/java/ceos/backend/domain/recruitment/domain/Recruitment.java b/src/main/java/ceos/backend/domain/recruitment/domain/Recruitment.java index 5149eb29..69e3436d 100644 --- a/src/main/java/ceos/backend/domain/recruitment/domain/Recruitment.java +++ b/src/main/java/ceos/backend/domain/recruitment/domain/Recruitment.java @@ -33,22 +33,26 @@ public class Recruitment extends BaseEntity { @NotNull private String devStudyUrl; - @NotNull private LocalDate startDateDoc; + @NotNull private LocalDateTime startDateDoc; - @NotNull private LocalDate endDateDoc; + @NotNull private LocalDateTime endDateDoc; - @NotNull private LocalDate resultDateDoc; + @NotNull private LocalDateTime resultDateDoc; - @NotNull private LocalDate startDateInterview; + @NotNull private LocalDateTime startDateInterview; - @NotNull private LocalDate endDateInterview; + @NotNull private LocalDateTime endDateInterview; - @NotNull private LocalDate resultDateFinal; + @NotNull private LocalDateTime resultDateFinal; @NotNull private String openChatUrl; @NotNull private LocalDate otDate; + @NotNull private LocalDate ideathonDate; + + @NotNull private LocalDate hackathonDate; + @NotNull private LocalDate demodayDate; private LocalDateTime applicationExcelCreatedAt; @@ -60,14 +64,16 @@ private Recruitment( String prodStudyUrl, String designStudyUrl, String devStudyUrl, - LocalDate startDateDoc, - LocalDate endDateDoc, - LocalDate resultDateDoc, - LocalDate startDateInterview, - LocalDate endDateInterview, - LocalDate resultDateFinal, + LocalDateTime startDateDoc, + LocalDateTime endDateDoc, + LocalDateTime resultDateDoc, + LocalDateTime startDateInterview, + LocalDateTime endDateInterview, + LocalDateTime resultDateFinal, String openChatUrl, LocalDate otDate, + LocalDate ideathonDate, + LocalDate hackathonDate, LocalDate demodayDate, LocalDateTime applicationExcelCreatedAt) { this.generation = generation; @@ -82,6 +88,8 @@ private Recruitment( this.resultDateFinal = resultDateFinal; this.openChatUrl = openChatUrl; this.otDate = otDate; + this.ideathonDate = ideathonDate; + this.hackathonDate = hackathonDate; this.demodayDate = demodayDate; this.applicationExcelCreatedAt = applicationExcelCreatedAt; } @@ -99,6 +107,8 @@ public void updateRecruitment(RecruitmentDTO recruitmentDTO) { this.resultDateFinal = recruitmentDTO.getResultDateFinal(); this.openChatUrl = recruitmentDTO.getOpenChatUrl(); this.otDate = recruitmentDTO.getOtDate(); + this.ideathonDate = recruitmentDTO.getIdeathonDate(); + this.hackathonDate = recruitmentDTO.getHackathonDate(); this.demodayDate = recruitmentDTO.getDemodayDate(); } @@ -113,7 +123,7 @@ public void validateGeneration(int generation) { } } - public void validateBetweenStartDateDocAndEndDateDoc(LocalDate now) { + public void validateBetweenStartDateDocAndEndDateDoc(LocalDateTime now) { if (now.compareTo(this.getStartDateDoc()) < 0) { throw NotApplicationDuration.EXCEPTION; } @@ -122,7 +132,7 @@ public void validateBetweenStartDateDocAndEndDateDoc(LocalDate now) { } } - public void validateFinalResultAbleDuration(LocalDate now) { + public void validateFinalResultAbleDuration(LocalDateTime now) { if (now.compareTo(this.resultDateFinal.plusDays(5)) >= 0) { throw NotFinalResultCheckDuration.EXCEPTION; } @@ -131,7 +141,7 @@ public void validateFinalResultAbleDuration(LocalDate now) { } } - public void validateBetweenStartDateDocAndResultDateDoc(LocalDate now) { + public void validateBetweenStartDateDocAndResultDateDoc(LocalDateTime now) { if (now.compareTo(this.startDateDoc) < 0) { throw NotDocumentPassDuration.EXCEPTION; } @@ -140,7 +150,7 @@ public void validateBetweenStartDateDocAndResultDateDoc(LocalDate now) { } } - public void validateBetweenResultDateDocAndResultDateFinal(LocalDate now) { + public void validateBetweenResultDateDocAndResultDateFinal(LocalDateTime now) { if (now.compareTo(this.resultDateDoc) < 0) { throw NotFinalPassDuration.EXCEPTION; } @@ -149,13 +159,13 @@ public void validateBetweenResultDateDocAndResultDateFinal(LocalDate now) { } } - public void validateBeforeStartDateDoc(LocalDate now) { + public void validateBeforeStartDateDoc(LocalDateTime now) { if (now.compareTo(this.startDateDoc) >= 0) { throw AlreadyApplicationDuration.EXCEPTION; } } - public void validAmenablePeriod(LocalDate now) { + public void validAmenablePeriod(LocalDateTime now) { if (now.compareTo(this.startDateDoc) >= 0 && now.compareTo(this.resultDateFinal) <= 0) { throw NotAllowedToModify.EXCEPTION; } diff --git a/src/main/java/ceos/backend/domain/recruitment/dto/RecruitmentDTO.java b/src/main/java/ceos/backend/domain/recruitment/dto/RecruitmentDTO.java index fd73857f..c177e48c 100644 --- a/src/main/java/ceos/backend/domain/recruitment/dto/RecruitmentDTO.java +++ b/src/main/java/ceos/backend/domain/recruitment/dto/RecruitmentDTO.java @@ -3,6 +3,7 @@ import ceos.backend.domain.recruitment.domain.Recruitment; import java.time.LocalDate; +import java.time.LocalDateTime; import lombok.Builder; import lombok.Getter; @@ -12,14 +13,16 @@ public class RecruitmentDTO { private String prodStudyUrl; private String designStudyUrl; private String devStudyUrl; - private LocalDate startDateDoc; - private LocalDate endDateDoc; - private LocalDate resultDateDoc; - private LocalDate startDateInterview; - private LocalDate endDateInterview; - private LocalDate resultDateFinal; + private LocalDateTime startDateDoc; + private LocalDateTime endDateDoc; + private LocalDateTime resultDateDoc; + private LocalDateTime startDateInterview; + private LocalDateTime endDateInterview; + private LocalDateTime resultDateFinal; private String openChatUrl; private LocalDate otDate; + private LocalDate ideathonDate; + private LocalDate hackathonDate; private LocalDate demodayDate; @Builder @@ -28,14 +31,16 @@ public RecruitmentDTO( String prodStudyUrl, String designStudyUrl, String devStudyUrl, - LocalDate startDateDoc, - LocalDate endDateDoc, - LocalDate resultDateDoc, - LocalDate startDateInterview, - LocalDate endDateInterview, - LocalDate resultDateFinal, + LocalDateTime startDateDoc, + LocalDateTime endDateDoc, + LocalDateTime resultDateDoc, + LocalDateTime startDateInterview, + LocalDateTime endDateInterview, + LocalDateTime resultDateFinal, String openChatUrl, LocalDate otDate, + LocalDate ideathonDate, + LocalDate hackathonDate, LocalDate demodayDate) { this.generation = generation; this.prodStudyUrl = prodStudyUrl; @@ -49,6 +54,8 @@ public RecruitmentDTO( this.resultDateFinal = resultDateFinal; this.openChatUrl = openChatUrl; this.otDate = otDate; + this.ideathonDate = ideathonDate; + this.hackathonDate = hackathonDate; this.demodayDate = demodayDate; } @@ -66,6 +73,8 @@ public static RecruitmentDTO from(Recruitment recruitment) { .resultDateFinal(recruitment.getResultDateFinal()) .openChatUrl(recruitment.getOpenChatUrl()) .otDate(recruitment.getOtDate()) + .ideathonDate(recruitment.getIdeathonDate()) + .hackathonDate(recruitment.getHackathonDate()) .demodayDate(recruitment.getDemodayDate()) .build(); } diff --git a/src/main/java/ceos/backend/domain/recruitment/dto/UserRecruitmentDTO.java b/src/main/java/ceos/backend/domain/recruitment/dto/UserRecruitmentDTO.java index 4b64ed45..d13b1a6d 100644 --- a/src/main/java/ceos/backend/domain/recruitment/dto/UserRecruitmentDTO.java +++ b/src/main/java/ceos/backend/domain/recruitment/dto/UserRecruitmentDTO.java @@ -3,6 +3,7 @@ import ceos.backend.domain.recruitment.domain.Recruitment; import java.time.LocalDate; +import java.time.LocalDateTime; import lombok.Builder; import lombok.Getter; @@ -12,13 +13,15 @@ public class UserRecruitmentDTO { private String prodStudyUrl; private String designStudyUrl; private String devStudyUrl; - private LocalDate startDateDoc; - private LocalDate endDateDoc; - private LocalDate resultDateDoc; - private LocalDate startDateInterview; - private LocalDate endDateInterview; - private LocalDate resultDateFinal; + private LocalDateTime startDateDoc; + private LocalDateTime endDateDoc; + private LocalDateTime resultDateDoc; + private LocalDateTime startDateInterview; + private LocalDateTime endDateInterview; + private LocalDateTime resultDateFinal; private LocalDate otDate; + private LocalDate ideathonDate; + private LocalDate hackathonDate; private LocalDate demodayDate; @Builder @@ -27,13 +30,15 @@ public UserRecruitmentDTO( String prodStudyUrl, String designStudyUrl, String devStudyUrl, - LocalDate startDateDoc, - LocalDate endDateDoc, - LocalDate resultDateDoc, - LocalDate startDateInterview, - LocalDate endDateInterview, - LocalDate resultDateFinal, + LocalDateTime startDateDoc, + LocalDateTime endDateDoc, + LocalDateTime resultDateDoc, + LocalDateTime startDateInterview, + LocalDateTime endDateInterview, + LocalDateTime resultDateFinal, LocalDate otDate, + LocalDate ideathonDate, + LocalDate hackathonDate, LocalDate demodayDate) { this.generation = generation; this.prodStudyUrl = prodStudyUrl; @@ -46,6 +51,8 @@ public UserRecruitmentDTO( this.endDateInterview = endDateInterview; this.resultDateFinal = resultDateFinal; this.otDate = otDate; + this.ideathonDate = ideathonDate; + this.hackathonDate = hackathonDate; this.demodayDate = demodayDate; } @@ -62,6 +69,8 @@ public static UserRecruitmentDTO from(Recruitment recruitment) { .endDateInterview(recruitment.getEndDateInterview()) .resultDateFinal(recruitment.getResultDateFinal()) .otDate(recruitment.getOtDate()) + .ideathonDate(recruitment.getIdeathonDate()) + .hackathonDate(recruitment.getHackathonDate()) .demodayDate(recruitment.getDemodayDate()) .build(); } diff --git a/src/main/java/ceos/backend/domain/recruitment/validator/RecruitmentValidator.java b/src/main/java/ceos/backend/domain/recruitment/validator/RecruitmentValidator.java index 1910a5e1..c8f731f0 100644 --- a/src/main/java/ceos/backend/domain/recruitment/validator/RecruitmentValidator.java +++ b/src/main/java/ceos/backend/domain/recruitment/validator/RecruitmentValidator.java @@ -2,7 +2,7 @@ import ceos.backend.domain.recruitment.helper.RecruitmentHelper; -import java.time.LocalDate; +import java.time.LocalDateTime; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Component; @@ -14,26 +14,26 @@ public class RecruitmentValidator { public void validateBetweenStartDateDocAndEndDateDoc() { recruitmentHelper .takeRecruitment() - .validateBetweenStartDateDocAndEndDateDoc(LocalDate.now()); + .validateBetweenStartDateDocAndEndDateDoc(LocalDateTime.now()); } public void validateBeforeStartDateDoc() { - recruitmentHelper.takeRecruitment().validateBeforeStartDateDoc(LocalDate.now()); + recruitmentHelper.takeRecruitment().validateBeforeStartDateDoc(LocalDateTime.now()); } public void validateBetweenResultDateDocAndResultDateFinal() { recruitmentHelper .takeRecruitment() - .validateBetweenResultDateDocAndResultDateFinal(LocalDate.now()); + .validateBetweenResultDateDocAndResultDateFinal(LocalDateTime.now()); } public void validateFinalResultAbleDuration() { - recruitmentHelper.takeRecruitment().validateFinalResultAbleDuration(LocalDate.now()); + recruitmentHelper.takeRecruitment().validateFinalResultAbleDuration(LocalDateTime.now()); } public void validateBetweenStartDateDocAndResultDateDoc() { recruitmentHelper .takeRecruitment() - .validateBetweenStartDateDocAndResultDateDoc(LocalDate.now()); + .validateBetweenStartDateDocAndResultDateDoc(LocalDateTime.now()); } } diff --git a/src/main/java/ceos/backend/global/config/WebSecurityConfig.java b/src/main/java/ceos/backend/global/config/WebSecurityConfig.java index 0de5b0a4..725e7df7 100644 --- a/src/main/java/ceos/backend/global/config/WebSecurityConfig.java +++ b/src/main/java/ceos/backend/global/config/WebSecurityConfig.java @@ -50,6 +50,9 @@ public class WebSecurityConfig { @Value("${server.admin_url}") private String ADMIN_URL; + @Value("${server.dev_url}") + private String DEV_URL; + @Value("${swagger.user}") private String swaggerUser; @@ -82,7 +85,7 @@ public class WebSecurityConfig { private final String[] GetPermittedPatterns = { "/awards/**", - "/recruitments/**", + "/recruitments", "/projects/**", "/activities/**", "/managements/**", @@ -188,7 +191,8 @@ private CorsConfiguration getDefaultCorsConfiguration() { "http://localhost:3001", USER_URL, ADMIN_URL, - SERVER_URL)); + SERVER_URL, + DEV_URL)); configuration.setAllowedHeaders(List.of("*")); configuration.setAllowedMethods(List.of("*")); configuration.setAllowCredentials(true); diff --git a/src/test/java/ceos/backend/domain/recruitments/domain/SettingsTest.java b/src/test/java/ceos/backend/domain/recruitments/domain/SettingsTest.java index 869547e7..a0f52b95 100644 --- a/src/test/java/ceos/backend/domain/recruitments/domain/SettingsTest.java +++ b/src/test/java/ceos/backend/domain/recruitments/domain/SettingsTest.java @@ -5,7 +5,7 @@ import ceos.backend.domain.admin.exception.NotAllowedToModify; import ceos.backend.domain.recruitment.domain.Recruitment; import ceos.backend.domain.recruitment.helper.RecruitmentHelper; -import java.time.LocalDate; +import java.time.LocalDateTime; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; @@ -23,13 +23,15 @@ void validAmenablePeriod_X() { Recruitment recruitment = recruitmentHelper.takeRecruitment(); // when - LocalDate startDateDoc = recruitment.getStartDateDoc(); - LocalDate date = - LocalDate.of( + LocalDateTime startDateDoc = recruitment.getStartDateDoc(); + + LocalDateTime date = + LocalDateTime.of( startDateDoc.getYear(), startDateDoc.getMonth(), - startDateDoc.getDayOfMonth() + 1); - + startDateDoc.getDayOfMonth(), + startDateDoc.getHour(), + startDateDoc.getMinute() + 1); // then assertThrows( NotAllowedToModify.class, @@ -46,13 +48,14 @@ void validAmenablePeriod_O() { Recruitment recruitment = recruitmentHelper.takeRecruitment(); // when - LocalDate startDateDoc = recruitment.getStartDateDoc(); - LocalDate date = - LocalDate.of( + LocalDateTime startDateDoc = recruitment.getStartDateDoc(); + LocalDateTime date = + LocalDateTime.of( startDateDoc.getYear(), startDateDoc.getMonth(), - startDateDoc.getDayOfMonth() - 1); - + startDateDoc.getDayOfMonth(), + startDateDoc.getHour(), + startDateDoc.getMinute() - 1); // then recruitment.validAmenablePeriod(date); }