diff --git a/src/main/java/com/challenge/api/controller/auth/request/KakaoSigninRequest.java b/src/main/java/com/challenge/api/controller/auth/request/KakaoSigninRequest.java index 931fe60..0dd9434 100644 --- a/src/main/java/com/challenge/api/controller/auth/request/KakaoSigninRequest.java +++ b/src/main/java/com/challenge/api/controller/auth/request/KakaoSigninRequest.java @@ -31,12 +31,12 @@ public class KakaoSigninRequest { private Gender gender; @NotNull(message = "jobId는 필수 입력값입니다.") - @Min(value = 1, message = "jobId는 1 이상의 값이어야 합니다.") + @Min(value = 0, message = "jobId는 0 이상의 값이어야 합니다.") @Max(value = 20, message = "jobId는 20 이하의 값이어야 합니다.") private Long jobId; @NotNull(message = "yearId는 필수 입력값입니다.") - @Min(value = 1, message = "yearId는 1 이상의 값이어야 합니다.") + @Min(value = 0, message = "yearId는 0 이상의 값이어야 합니다.") @Max(value = 4, message = "yearId는 4 이하의 값이어야 합니다.") private int yearId; @@ -53,7 +53,7 @@ public KakaoSigninServiceRequest toServiceRequest() { @Builder private KakaoSigninRequest(String accessToken, String nickname, String birth, Gender gender, Long jobId, - int yearId) { + int yearId) { this.accessToken = accessToken; this.nickname = nickname; this.birth = birth; diff --git a/src/main/java/com/challenge/api/controller/member/request/UpdateJobRequest.java b/src/main/java/com/challenge/api/controller/member/request/UpdateJobRequest.java index 6d4b89d..a744000 100644 --- a/src/main/java/com/challenge/api/controller/member/request/UpdateJobRequest.java +++ b/src/main/java/com/challenge/api/controller/member/request/UpdateJobRequest.java @@ -13,7 +13,7 @@ public class UpdateJobRequest { @NotNull(message = "jobId는 필수 입력값입니다.") - @Min(value = 1, message = "jobId는 1 이상의 값이어야 합니다.") + @Min(value = 0, message = "jobId는 0 이상의 값이어야 합니다.") @Max(value = 20, message = "jobId는 20 이하의 값이어야 합니다.") private Long jobId; diff --git a/src/main/java/com/challenge/api/controller/member/request/UpdateJobYearRequest.java b/src/main/java/com/challenge/api/controller/member/request/UpdateJobYearRequest.java index 609c4a9..6f7e17a 100644 --- a/src/main/java/com/challenge/api/controller/member/request/UpdateJobYearRequest.java +++ b/src/main/java/com/challenge/api/controller/member/request/UpdateJobYearRequest.java @@ -13,7 +13,7 @@ public class UpdateJobYearRequest { @NotNull(message = "yearId는 필수 입력값입니다.") - @Min(value = 1, message = "yearId는 1 이상의 값이어야 합니다.") + @Min(value = 0, message = "yearId는 0 이상의 값이어야 합니다.") @Max(value = 4, message = "yearId는 4 이하의 값이어야 합니다.") private int yearId; diff --git a/src/main/java/com/challenge/api/service/auth/AuthService.java b/src/main/java/com/challenge/api/service/auth/AuthService.java index 1c89d22..c8195c9 100644 --- a/src/main/java/com/challenge/api/service/auth/AuthService.java +++ b/src/main/java/com/challenge/api/service/auth/AuthService.java @@ -73,11 +73,21 @@ public LoginResponse kakaoSignin(KakaoSigninServiceRequest request) { authValidator.validateUniqueNickname(request.getNickname()); // 직무 데이터 설정 - Job job = jobRepository.findById(request.getJobId()) - .orElseThrow(() -> new GlobalException(ErrorCode.JOB_NOT_FOUND)); + Job job; + if (request.getJobId() == 0) { + job = null; + } else { + job = jobRepository.findById(request.getJobId()) + .orElseThrow(() -> new GlobalException(ErrorCode.JOB_NOT_FOUND)); + } // 연차 enum 데이터 설정 - JobYear jobYear = JobYear.of(request.getYearId()); + JobYear jobYear; + if (request.getYearId() == 0) { + jobYear = null; + } else { + jobYear = JobYear.of(request.getYearId()); + } // member 엔티티 생성 및 저장 Member member = Member.create(userInfo.getSocialId(), userInfo.getEmail(), request.getNickname(), diff --git a/src/main/java/com/challenge/api/service/member/MemberService.java b/src/main/java/com/challenge/api/service/member/MemberService.java index f2ac83f..f73ff31 100644 --- a/src/main/java/com/challenge/api/service/member/MemberService.java +++ b/src/main/java/com/challenge/api/service/member/MemberService.java @@ -127,11 +127,15 @@ public String updateGender(Member member, UpdateGenderServiceRequest request) { */ @Transactional public String updateJob(Member member, UpdateJobServiceRequest request) { - // 직무 데이터 조회 - Job job = jobRepository.findById(request.getJobId()) - .orElseThrow(() -> new GlobalException(ErrorCode.JOB_NOT_FOUND)); - - member.updateJob(job); + if (request.getJobId() == 0) { + member.updateJob(null); + } else { + // 직무 데이터 조회 + Job job = jobRepository.findById(request.getJobId()) + .orElseThrow(() -> new GlobalException(ErrorCode.JOB_NOT_FOUND)); + + member.updateJob(job); + } return "직업 수정 성공"; } @@ -145,9 +149,12 @@ public String updateJob(Member member, UpdateJobServiceRequest request) { */ @Transactional public String updateJobYear(Member member, UpdateJobYearServiceRequest request) { - JobYear jobYear = JobYear.of(request.getYearId()); - - member.updateJobYear(jobYear); + if (request.getYearId() == 0) { + member.updateJobYear(null); + } else { + JobYear jobYear = JobYear.of(request.getYearId()); + member.updateJobYear(jobYear); + } return "연차 수정 성공"; } diff --git a/src/main/java/com/challenge/api/service/member/response/MemberInfoResponse.java b/src/main/java/com/challenge/api/service/member/response/MemberInfoResponse.java index 69b3ac4..3ba9d2d 100644 --- a/src/main/java/com/challenge/api/service/member/response/MemberInfoResponse.java +++ b/src/main/java/com/challenge/api/service/member/response/MemberInfoResponse.java @@ -12,12 +12,13 @@ public class MemberInfoResponse { private final String nickname; private final String birth; private final Gender gender; - private final long jobId; + private final Long jobId; private final String job; - private final int jobYearId; + private final Integer jobYearId; @Builder - private MemberInfoResponse(String nickname, String birth, Gender gender, long jobId, String job, int jobYearId) { + private MemberInfoResponse(String nickname, String birth, Gender gender, Long jobId, String job, + Integer jobYearId) { this.nickname = nickname; this.birth = birth; this.gender = gender; @@ -27,13 +28,17 @@ private MemberInfoResponse(String nickname, String birth, Gender gender, long jo } public static MemberInfoResponse of(Member member) { + Long jobId = member.getJob() == null ? null : member.getJob().getId(); + String job = member.getJob() == null ? null : member.getJob().getDescription(); + Integer jobYearId = member.getJobYear() == null ? null : member.getJobYear().getId(); + return MemberInfoResponse.builder() .nickname(member.getNickname()) .birth(DateUtils.toDayString(member.getBirth())) .gender(member.getGender()) - .jobId(member.getJob().getId()) - .job(member.getJob().getDescription()) - .jobYearId(member.getJobYear().getId()) + .jobId(jobId) + .job(job) + .jobYearId(jobYearId) .build(); } diff --git a/src/main/java/com/challenge/domain/member/Member.java b/src/main/java/com/challenge/domain/member/Member.java index 84cfc0d..76accdb 100644 --- a/src/main/java/com/challenge/domain/member/Member.java +++ b/src/main/java/com/challenge/domain/member/Member.java @@ -53,7 +53,7 @@ public class Member extends BaseDateTimeEntity { private Gender gender; @Enumerated(EnumType.STRING) - @Column(columnDefinition = "VARCHAR(10)", nullable = false) + @Column(columnDefinition = "VARCHAR(10)") private JobYear jobYear; @Column(length = 1000) diff --git a/src/test/java/com/challenge/api/controller/auth/AuthControllerTest.java b/src/test/java/com/challenge/api/controller/auth/AuthControllerTest.java index 8ea47a5..e07ee8f 100644 --- a/src/test/java/com/challenge/api/controller/auth/AuthControllerTest.java +++ b/src/test/java/com/challenge/api/controller/auth/AuthControllerTest.java @@ -293,7 +293,7 @@ void kakaoSigninFailedWhenJobIdIsNull() throws Exception { .andExpect(jsonPath("$.url").value("/api/v1/auth/signin/kakao")); } - @DisplayName("카카오 회원가입 실패: jobId가 1 미만인 경우 에러 응답을 반환한다.") + @DisplayName("카카오 회원가입 실패: jobId가 0 미만인 경우 에러 응답을 반환한다.") @Test void kakaoSigninFailedWhenJobIdIsLessThanMin() throws Exception { // given @@ -302,7 +302,7 @@ void kakaoSigninFailedWhenJobIdIsLessThanMin() throws Exception { .nickname(MOCK_NICKNAME) .birth(MOCK_BIRTH) .gender(MOCK_GENDER) - .jobId(0L) + .jobId(-1L) .yearId(MOCK_JOBYEAR.getId()) .build(); @@ -311,7 +311,7 @@ void kakaoSigninFailedWhenJobIdIsLessThanMin() throws Exception { .contentType(MediaType.APPLICATION_JSON) .content(objectMapper.writeValueAsString(request))) .andExpect(status().is(400)) - .andExpect(jsonPath("$.message").value("jobId는 1 이상의 값이어야 합니다.")) + .andExpect(jsonPath("$.message").value("jobId는 0 이상의 값이어야 합니다.")) .andExpect(jsonPath("$.code").value("VALID_ERROR")) .andExpect(jsonPath("$.url").value("/api/v1/auth/signin/kakao")); } @@ -339,7 +339,7 @@ void kakaoSigninFailedWhenJobIdIsMoreThanMax() throws Exception { .andExpect(jsonPath("$.url").value("/api/v1/auth/signin/kakao")); } - @DisplayName("카카오 회원가입 실패: yearId가 1 미만인 경우 에러 응답을 반환한다.") + @DisplayName("카카오 회원가입 실패: yearId가 0 미만인 경우 에러 응답을 반환한다.") @Test void kakaoSigninFailedWhenYearIdIsLessThanMin() throws Exception { // given @@ -349,7 +349,7 @@ void kakaoSigninFailedWhenYearIdIsLessThanMin() throws Exception { .birth(MOCK_BIRTH) .gender(MOCK_GENDER) .jobId(MOCK_JOB.getId()) - .yearId(0) + .yearId(-1) .build(); // when // then @@ -357,7 +357,7 @@ void kakaoSigninFailedWhenYearIdIsLessThanMin() throws Exception { .contentType(MediaType.APPLICATION_JSON) .content(objectMapper.writeValueAsString(request))) .andExpect(status().is(400)) - .andExpect(jsonPath("$.message").value("yearId는 1 이상의 값이어야 합니다.")) + .andExpect(jsonPath("$.message").value("yearId는 0 이상의 값이어야 합니다.")) .andExpect(jsonPath("$.code").value("VALID_ERROR")) .andExpect(jsonPath("$.url").value("/api/v1/auth/signin/kakao")); } diff --git a/src/test/java/com/challenge/api/controller/member/MemberControllerTest.java b/src/test/java/com/challenge/api/controller/member/MemberControllerTest.java index 8340260..617d7f9 100644 --- a/src/test/java/com/challenge/api/controller/member/MemberControllerTest.java +++ b/src/test/java/com/challenge/api/controller/member/MemberControllerTest.java @@ -322,12 +322,12 @@ void updateJobFailedWhenIdIsNull() throws Exception { .andExpect(jsonPath("$.url").value("/api/v1/member/job")); } - @DisplayName("직무 수정 실패: jobId가 1 미만인 경우 에러 응답을 반환한다.") + @DisplayName("직무 수정 실패: jobId가 0 미만인 경우 에러 응답을 반환한다.") @Test void updateJobFailedWhenJobIdIsLessThanMin() throws Exception { // given UpdateJobRequest request = UpdateJobRequest.builder() - .jobId(0L) + .jobId(-1L) .build(); // when // then @@ -335,7 +335,7 @@ void updateJobFailedWhenJobIdIsLessThanMin() throws Exception { .contentType(MediaType.APPLICATION_JSON) .content(objectMapper.writeValueAsString(request))) .andExpect(status().is(400)) - .andExpect(jsonPath("$.message").value("jobId는 1 이상의 값이어야 합니다.")) + .andExpect(jsonPath("$.message").value("jobId는 0 이상의 값이어야 합니다.")) .andExpect(jsonPath("$.code").value("VALID_ERROR")) .andExpect(jsonPath("$.url").value("/api/v1/member/job")); } @@ -390,12 +390,12 @@ void updateJobYearSucceeds() throws Exception { .andExpect(jsonPath("$.data").value(updateJobYearResponse)); } - @DisplayName("연차 수정 실패: yearId가 1 미만인 경우 에러 응답을 반환한다.") + @DisplayName("연차 수정 실패: yearId가 0 미만인 경우 에러 응답을 반환한다.") @Test void updateJobYearFailedWhenIdIsLessThanMin() throws Exception { // given UpdateJobYearRequest request = UpdateJobYearRequest.builder() - .yearId(0) + .yearId(-1) .build(); // when // then @@ -403,7 +403,7 @@ void updateJobYearFailedWhenIdIsLessThanMin() throws Exception { .contentType(MediaType.APPLICATION_JSON) .content(objectMapper.writeValueAsString(request))) .andExpect(status().is(400)) - .andExpect(jsonPath("$.message").value("yearId는 1 이상의 값이어야 합니다.")) + .andExpect(jsonPath("$.message").value("yearId는 0 이상의 값이어야 합니다.")) .andExpect(jsonPath("$.code").value("VALID_ERROR")) .andExpect(jsonPath("$.url").value("/api/v1/member/jobyear")); } diff --git a/src/test/java/com/challenge/docs/AuthControllerDocsTest.java b/src/test/java/com/challenge/docs/AuthControllerDocsTest.java index 945d8c7..c123e6e 100644 --- a/src/test/java/com/challenge/docs/AuthControllerDocsTest.java +++ b/src/test/java/com/challenge/docs/AuthControllerDocsTest.java @@ -355,7 +355,7 @@ void kakaoSigninFailJobIdNull() throws Exception { )); } - @DisplayName("카카오 회원가입 실패: jobId가 1 미만인 경우") + @DisplayName("카카오 회원가입 실패: jobId가 0 미만인 경우") @Test void kakaoSigninFailJobIdLessThan() throws Exception { // given @@ -364,7 +364,7 @@ void kakaoSigninFailJobIdLessThan() throws Exception { .nickname(MOCK_NICKNAME) .birth(MOCK_BIRTH) .gender(MOCK_GENDER) - .jobId(0L) + .jobId(-1L) .yearId(MOCK_JOBYEAR.getId()) .build(); @@ -373,7 +373,7 @@ void kakaoSigninFailJobIdLessThan() throws Exception { .contentType(MediaType.APPLICATION_JSON) .content(objectMapper.writeValueAsString(request))) .andExpect(status().is(400)) - .andExpect(jsonPath("$.message").value("jobId는 1 이상의 값이어야 합니다.")) + .andExpect(jsonPath("$.message").value("jobId는 0 이상의 값이어야 합니다.")) .andExpect(jsonPath("$.code").value("VALID_ERROR")) .andExpect(jsonPath("$.url").value("/api/v1/auth/signin/kakao")) .andDo(restDocs.document( @@ -409,7 +409,7 @@ void kakaoSigninFailJobIdGreaterThan() throws Exception { )); } - @DisplayName("카카오 회원가입 실패: yearId가 1 미만인 경우") + @DisplayName("카카오 회원가입 실패: yearId가 0 미만인 경우") @Test void kakaoSigninFailYearIdLessThan() throws Exception { // given @@ -419,7 +419,7 @@ void kakaoSigninFailYearIdLessThan() throws Exception { .birth(MOCK_BIRTH) .gender(MOCK_GENDER) .jobId(MOCK_JOB.getId()) - .yearId(0) + .yearId(-1) .build(); // when // then @@ -427,7 +427,7 @@ void kakaoSigninFailYearIdLessThan() throws Exception { .contentType(MediaType.APPLICATION_JSON) .content(objectMapper.writeValueAsString(request))) .andExpect(status().is(400)) - .andExpect(jsonPath("$.message").value("yearId는 1 이상의 값이어야 합니다.")) + .andExpect(jsonPath("$.message").value("yearId는 0 이상의 값이어야 합니다.")) .andExpect(jsonPath("$.code").value("VALID_ERROR")) .andExpect(jsonPath("$.url").value("/api/v1/auth/signin/kakao")) .andDo(restDocs.document( diff --git a/src/test/java/com/challenge/docs/MemberControllerDocsTest.java b/src/test/java/com/challenge/docs/MemberControllerDocsTest.java index 6d8d66b..b27db49 100644 --- a/src/test/java/com/challenge/docs/MemberControllerDocsTest.java +++ b/src/test/java/com/challenge/docs/MemberControllerDocsTest.java @@ -470,12 +470,12 @@ void updateJobFailIdNull() throws Exception { )); } - @DisplayName("직무 수정 실패: jobId가 1 미만인 경우 에러 응답을 반환한다.") + @DisplayName("직무 수정 실패: jobId가 0 미만인 경우 에러 응답을 반환한다.") @Test void updateJobFailIdLessThan() throws Exception { // given UpdateJobRequest request = UpdateJobRequest.builder() - .jobId(0L) + .jobId(-1L) .build(); // when // then @@ -483,7 +483,7 @@ void updateJobFailIdLessThan() throws Exception { .contentType(MediaType.APPLICATION_JSON) .content(objectMapper.writeValueAsString(request))) .andExpect(status().is(400)) - .andExpect(jsonPath("$.message").value("jobId는 1 이상의 값이어야 합니다.")) + .andExpect(jsonPath("$.message").value("jobId는 0 이상의 값이어야 합니다.")) .andExpect(jsonPath("$.code").value("VALID_ERROR")) .andExpect(jsonPath("$.url").value("/api/v1/member/job")) .andDo(restDocs.document( @@ -569,12 +569,12 @@ void updateJobYearSuccess() throws Exception { )); } - @DisplayName("연차 수정 실패: yearId가 1 미만인 경우 에러 응답을 반환한다.") + @DisplayName("연차 수정 실패: yearId가 0 미만인 경우 에러 응답을 반환한다.") @Test void updateJobYearFailIdLessThan() throws Exception { // given UpdateJobYearRequest request = UpdateJobYearRequest.builder() - .yearId(0) + .yearId(-1) .build(); // when // then @@ -582,7 +582,7 @@ void updateJobYearFailIdLessThan() throws Exception { .contentType(MediaType.APPLICATION_JSON) .content(objectMapper.writeValueAsString(request))) .andExpect(status().is(400)) - .andExpect(jsonPath("$.message").value("yearId는 1 이상의 값이어야 합니다.")) + .andExpect(jsonPath("$.message").value("yearId는 0 이상의 값이어야 합니다.")) .andExpect(jsonPath("$.code").value("VALID_ERROR")) .andExpect(jsonPath("$.url").value("/api/v1/member/jobyear")) .andDo(restDocs.document(