From be318b21f3b93ce14e0fab0f2633f2c70096e46c Mon Sep 17 00:00:00 2001 From: sung-silver <jinna0319@gmail.com> Date: Thu, 21 Mar 2024 22:32:18 +0900 Subject: [PATCH 1/5] =?UTF-8?q?[FEAT]=20=EC=84=9C=EB=B9=84=EC=8A=A4=20?= =?UTF-8?q?=EB=8B=A8=EC=97=90=EC=84=9C=20=EB=8F=84=EB=A9=94=EC=9D=B8=20?= =?UTF-8?q?=EB=A1=9C=EC=A7=81=20=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/sopt/Server/common/AgeEnum.java | 13 +++++++++ .../java/com/sopt/Server/domain/Result.java | 4 +++ .../sopt/Server/service/ResultService.java | 27 +++---------------- 3 files changed, 21 insertions(+), 23 deletions(-) diff --git a/howoldareu_clone/src/main/java/com/sopt/Server/common/AgeEnum.java b/howoldareu_clone/src/main/java/com/sopt/Server/common/AgeEnum.java index c48727c..7b0f2d5 100644 --- a/howoldareu_clone/src/main/java/com/sopt/Server/common/AgeEnum.java +++ b/howoldareu_clone/src/main/java/com/sopt/Server/common/AgeEnum.java @@ -18,5 +18,18 @@ public enum AgeEnum { private final String imageUrl1; private final String imageUrl2; + public static AgeEnum getAgeEnum(int age){ + if(age < 20) + return AgeEnum.TEENAGER; + else if(age < 30) + return AgeEnum.TWENTIES; + else if(age < 40) + return AgeEnum.THIRTIES; + else if(age < 50) + return AgeEnum.FORTIES; + else + return AgeEnum.FIFTIES; + } + } diff --git a/howoldareu_clone/src/main/java/com/sopt/Server/domain/Result.java b/howoldareu_clone/src/main/java/com/sopt/Server/domain/Result.java index 42752a5..a21a1c4 100644 --- a/howoldareu_clone/src/main/java/com/sopt/Server/domain/Result.java +++ b/howoldareu_clone/src/main/java/com/sopt/Server/domain/Result.java @@ -34,4 +34,8 @@ public Result(Long id, Member member, int resultAge, LocalDateTime testedDate) { this.resultAge = resultAge; this.testedDate = testedDate; } + + public String getTestedDateToString(){ + return testedDate.getMonthValue() + "월 " + testedDate.getDayOfMonth() + "일"; + } } diff --git a/howoldareu_clone/src/main/java/com/sopt/Server/service/ResultService.java b/howoldareu_clone/src/main/java/com/sopt/Server/service/ResultService.java index 5a24a8d..765e3e9 100644 --- a/howoldareu_clone/src/main/java/com/sopt/Server/service/ResultService.java +++ b/howoldareu_clone/src/main/java/com/sopt/Server/service/ResultService.java @@ -19,7 +19,6 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import java.time.LocalDateTime; import java.util.ArrayList; import java.util.List; @@ -41,7 +40,7 @@ public ResultResponseDTO saveResult(AnswerListRequestDTO request) { Answer answer = answerJpaRepository.findByQuestionAndAnswerType(question, result.answerType()).orElseThrow(()->new CustomException(Error.NOT_FOUND_ANSWER_EXCEPTION,Error.NOT_FOUND_ANSWER_EXCEPTION.getMessage())); memberAge += answer.getAnswerScore(); } - AgeEnum ageEnum = getAgeEnum(memberAge); + AgeEnum ageEnum = AgeEnum.getAgeEnum(memberAge); resultJpaRepository.save(Result.builder().member(member).resultAge(memberAge).build()); return ResultResponseDTO.of(request.nickname(),memberAge,ageEnum.getTitle(),ageEnum.getContent(),ageEnum.getImageUrl1(), ageEnum.getImageUrl2()); } @@ -50,10 +49,10 @@ public List<AllResultsResponseDTO> getAllResults(Long memberId) { List<Result> resultList = resultJpaRepository.findAllByMemberIdOrderByIdDesc(memberId); List<AllResultsResponseDTO> answer = new ArrayList<>(); - //멤버의 result 모두 갖고옴 이것을 각각의 result마다 allresultsresponsedto만들어야 해 + for(Result result : resultList) { - AgeEnum ageEnum = getAgeEnum(result.getResultAge()); - String time = getStringDate(result.getTestedDate()); + AgeEnum ageEnum = AgeEnum.getAgeEnum(result.getResultAge()); + String time = result.getTestedDateToString(); AllResultsResponseDTO dto = AllResultsResponseDTO.of(result, ageEnum.getTitle(), ageEnum.getContent(), time, ageEnum.getImageUrl1(), ageEnum.getImageUrl2()); answer.add(dto); } @@ -62,22 +61,4 @@ public List<AllResultsResponseDTO> getAllResults(Long memberId) { } - private String getStringDate(LocalDateTime time) { - String answer = time.getMonthValue() + "월 " + time.getDayOfMonth() + "일"; - return answer; - } - - private AgeEnum getAgeEnum(int age){ - if(age < 20) - return AgeEnum.TEENAGER; - else if(age < 30) - return AgeEnum.TWENTIES; - else if(age < 40) - return AgeEnum.THIRTIES; - else if(age < 50) - return AgeEnum.FORTIES; - else - return AgeEnum.FIFTIES; - } - } From 6e2ec209822506d98d360f5359286234d2bf86e1 Mon Sep 17 00:00:00 2001 From: sung-silver <jinna0319@gmail.com> Date: Thu, 21 Mar 2024 22:33:06 +0900 Subject: [PATCH 2/5] =?UTF-8?q?[STYLE]=20enum=20=EC=9C=84=EC=B9=98=20?= =?UTF-8?q?=EB=8F=84=EB=A9=94=EC=9D=B8=20=EC=95=84=EB=9E=98=EB=A1=9C=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/sopt/Server/{common => domain/enums}/AgeEnum.java | 2 +- .../src/main/java/com/sopt/Server/service/ResultService.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) rename howoldareu_clone/src/main/java/com/sopt/Server/{common => domain/enums}/AgeEnum.java (98%) diff --git a/howoldareu_clone/src/main/java/com/sopt/Server/common/AgeEnum.java b/howoldareu_clone/src/main/java/com/sopt/Server/domain/enums/AgeEnum.java similarity index 98% rename from howoldareu_clone/src/main/java/com/sopt/Server/common/AgeEnum.java rename to howoldareu_clone/src/main/java/com/sopt/Server/domain/enums/AgeEnum.java index 7b0f2d5..3d62a69 100644 --- a/howoldareu_clone/src/main/java/com/sopt/Server/common/AgeEnum.java +++ b/howoldareu_clone/src/main/java/com/sopt/Server/domain/enums/AgeEnum.java @@ -1,4 +1,4 @@ -package com.sopt.Server.common; +package com.sopt.Server.domain.enums; import lombok.AccessLevel; import lombok.AllArgsConstructor; diff --git a/howoldareu_clone/src/main/java/com/sopt/Server/service/ResultService.java b/howoldareu_clone/src/main/java/com/sopt/Server/service/ResultService.java index 765e3e9..5f076d3 100644 --- a/howoldareu_clone/src/main/java/com/sopt/Server/service/ResultService.java +++ b/howoldareu_clone/src/main/java/com/sopt/Server/service/ResultService.java @@ -1,6 +1,6 @@ package com.sopt.Server.service; -import com.sopt.Server.common.AgeEnum; +import com.sopt.Server.domain.enums.AgeEnum; import com.sopt.Server.controller.request.AnswerListRequestDTO; import com.sopt.Server.controller.request.AnswerRequestDTO; import com.sopt.Server.controller.response.AllResultsResponseDTO; From ad8387c5ba81d852f9e0f99e3d9bb16df438a1fa Mon Sep 17 00:00:00 2001 From: sung-silver <jinna0319@gmail.com> Date: Thu, 21 Mar 2024 22:51:25 +0900 Subject: [PATCH 3/5] =?UTF-8?q?[DOMAIN]=20AgeEnumTest=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sopt/Server/domain/enums/AgeEnumTest.java | 45 +++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 howoldareu_clone/src/test/java/com/sopt/Server/domain/enums/AgeEnumTest.java diff --git a/howoldareu_clone/src/test/java/com/sopt/Server/domain/enums/AgeEnumTest.java b/howoldareu_clone/src/test/java/com/sopt/Server/domain/enums/AgeEnumTest.java new file mode 100644 index 0000000..606fb1e --- /dev/null +++ b/howoldareu_clone/src/test/java/com/sopt/Server/domain/enums/AgeEnumTest.java @@ -0,0 +1,45 @@ +package com.sopt.Server.domain.enums; + +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +public class AgeEnumTest { + private static final int eighteen = 18; + private static final int twentyFive = 25; + private static final int thirtyOne = 31; + private static final int fortyThree = 43; + private static final int fiftyFive = 55; + + @Test + @DisplayName("18세는 10대이다") + void getAgeEnumTeenager() { + assertEquals(AgeEnum.TEENAGER, AgeEnum.getAgeEnum(eighteen)); + } + + @Test + @DisplayName("25세는 20대이다") + void getAgeEnumTwenties() { + assertEquals(AgeEnum.TWENTIES, AgeEnum.getAgeEnum(twentyFive)); + } + + @Test + @DisplayName("31세는 30대이다") + void getAgeEnumThirties() { + assertEquals(AgeEnum.THIRTIES, AgeEnum.getAgeEnum(thirtyOne)); + } + + @Test + @DisplayName("43세는 40대이다") + void getAgeEnumForties() { + assertEquals(AgeEnum.FORTIES, AgeEnum.getAgeEnum(fortyThree)); + } + + @Test + @DisplayName("55세는 50대이다") + void getAgeEnumFifties() { + assertEquals(AgeEnum.FIFTIES, AgeEnum.getAgeEnum(fiftyFive)); + } + +} \ No newline at end of file From 6154145cbfbf49e8d3fbf609c9f9392b01f8cd85 Mon Sep 17 00:00:00 2001 From: sung-silver <jinna0319@gmail.com> Date: Thu, 21 Mar 2024 22:57:12 +0900 Subject: [PATCH 4/5] =?UTF-8?q?[DOMAIN]=20Result=20=EC=97=94=ED=8B=B0?= =?UTF-8?q?=ED=8B=B0=EC=97=90=EC=84=9C=20getTestDateToString=20=ED=95=A8?= =?UTF-8?q?=EC=88=98=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/sopt/Server/domain/ResultTest.java | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 howoldareu_clone/src/test/java/com/sopt/Server/domain/ResultTest.java diff --git a/howoldareu_clone/src/test/java/com/sopt/Server/domain/ResultTest.java b/howoldareu_clone/src/test/java/com/sopt/Server/domain/ResultTest.java new file mode 100644 index 0000000..68d2591 --- /dev/null +++ b/howoldareu_clone/src/test/java/com/sopt/Server/domain/ResultTest.java @@ -0,0 +1,27 @@ +package com.sopt.Server.domain; + +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import java.time.LocalDateTime; + +import static org.junit.jupiter.api.Assertions.*; + +public class ResultTest { + @Test + @DisplayName("결과가 생성된 일자 정보를 반환한다") + void getTestDateToString() { + // given + LocalDateTime testedDate = LocalDateTime.of(2023, 3, 21, 12, 30); + Result result = Result.builder() + .testedDate(testedDate) + .build(); + String expected = "3월 21일"; + + // when + String resultString = result.getTestedDateToString(); + + // then + assertEquals(expected, resultString); + } +} \ No newline at end of file From 86e90bf4060e423aa83fbc1f720220dc244f9d4e Mon Sep 17 00:00:00 2001 From: sung-silver <jinna0319@gmail.com> Date: Tue, 26 Mar 2024 09:11:21 +0900 Subject: [PATCH 5/5] =?UTF-8?q?[REFACTOR]=20saveMember=20=EB=A6=AC?= =?UTF-8?q?=ED=8C=A9=ED=84=B0=EB=A7=81,=20repository=EC=97=90=EC=84=9C=20?= =?UTF-8?q?=EB=AA=85=EC=8B=9C=ED=95=98=EC=A7=80=20=EC=95=8A=EC=95=84?= =?UTF-8?q?=EB=8F=84=20=EB=90=98=EB=8A=94=20=EB=A9=94=EC=84=9C=EB=93=9C=20?= =?UTF-8?q?=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- howoldareu_clone/build.gradle | 2 ++ .../Server/controller/MemberController.java | 8 +++---- .../java/com/sopt/Server/domain/Answer.java | 2 +- .../repository/MemberJpaRepository.java | 6 +++++ .../repository/QuestionJpaRepository.java | 2 -- .../repository/ResultJpaRepository.java | 2 -- .../sopt/Server/service/MemberService.java | 23 ++++++++++--------- 7 files changed, 25 insertions(+), 20 deletions(-) diff --git a/howoldareu_clone/build.gradle b/howoldareu_clone/build.gradle index 7248b5c..8ac9063 100644 --- a/howoldareu_clone/build.gradle +++ b/howoldareu_clone/build.gradle @@ -28,6 +28,8 @@ dependencies { runtimeOnly 'com.mysql:mysql-connector-j' annotationProcessor 'org.projectlombok:lombok' testImplementation 'org.springframework.boot:spring-boot-starter-test' + testImplementation 'org.springframework.restdocs:spring-restdocs-mockmvc' + testImplementation 'org.springframework.restdocs:spring-restdocs-asciidoctor' } tasks.named('test') { diff --git a/howoldareu_clone/src/main/java/com/sopt/Server/controller/MemberController.java b/howoldareu_clone/src/main/java/com/sopt/Server/controller/MemberController.java index 35d6709..e00d374 100644 --- a/howoldareu_clone/src/main/java/com/sopt/Server/controller/MemberController.java +++ b/howoldareu_clone/src/main/java/com/sopt/Server/controller/MemberController.java @@ -9,16 +9,16 @@ import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; +import static com.sopt.Server.exception.Success.CREATE_MEMBER_SUCCESS; + @RestController @RequiredArgsConstructor public class MemberController { - + private final MemberService memberService; @PostMapping("/member") public ApiResponse<MemberGetResponse> saveMember(@RequestBody MemberPostRequest request) { - - ApiResponse<MemberGetResponse> response = memberService.saveMember(request.nickName(), request.age()); - return response; + return ApiResponse.success(CREATE_MEMBER_SUCCESS, memberService.saveMember(request)); } } diff --git a/howoldareu_clone/src/main/java/com/sopt/Server/domain/Answer.java b/howoldareu_clone/src/main/java/com/sopt/Server/domain/Answer.java index 4efbc45..84a2be4 100644 --- a/howoldareu_clone/src/main/java/com/sopt/Server/domain/Answer.java +++ b/howoldareu_clone/src/main/java/com/sopt/Server/domain/Answer.java @@ -14,7 +14,7 @@ public class Answer { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long answerId; - @ManyToOne + @ManyToOne(fetch = FetchType.LAZY) private Question question; private boolean answerType; diff --git a/howoldareu_clone/src/main/java/com/sopt/Server/repository/MemberJpaRepository.java b/howoldareu_clone/src/main/java/com/sopt/Server/repository/MemberJpaRepository.java index e9259dd..2e1a48d 100644 --- a/howoldareu_clone/src/main/java/com/sopt/Server/repository/MemberJpaRepository.java +++ b/howoldareu_clone/src/main/java/com/sopt/Server/repository/MemberJpaRepository.java @@ -1,10 +1,16 @@ package com.sopt.Server.repository; import com.sopt.Server.domain.Member; +import jakarta.persistence.EntityNotFoundException; import org.springframework.data.jpa.repository.JpaRepository; import java.util.Optional; public interface MemberJpaRepository extends JpaRepository<Member, Long> { Optional<Member> findByName(String name); + default Member findByNameOrThrow(String name) { + return findByName(name) + .orElseThrow(() -> + new EntityNotFoundException("해당 이름의 회원이 존재하지 않습니다.")); + } } diff --git a/howoldareu_clone/src/main/java/com/sopt/Server/repository/QuestionJpaRepository.java b/howoldareu_clone/src/main/java/com/sopt/Server/repository/QuestionJpaRepository.java index 56d6621..e70cdb2 100644 --- a/howoldareu_clone/src/main/java/com/sopt/Server/repository/QuestionJpaRepository.java +++ b/howoldareu_clone/src/main/java/com/sopt/Server/repository/QuestionJpaRepository.java @@ -7,6 +7,4 @@ import java.util.Optional; public interface QuestionJpaRepository extends JpaRepository<Question, Long>{ - List<Question> findAll(); - Optional<Question> findById(Long id); } diff --git a/howoldareu_clone/src/main/java/com/sopt/Server/repository/ResultJpaRepository.java b/howoldareu_clone/src/main/java/com/sopt/Server/repository/ResultJpaRepository.java index e9cb02b..67d7279 100644 --- a/howoldareu_clone/src/main/java/com/sopt/Server/repository/ResultJpaRepository.java +++ b/howoldareu_clone/src/main/java/com/sopt/Server/repository/ResultJpaRepository.java @@ -6,7 +6,5 @@ import java.util.List; public interface ResultJpaRepository extends JpaRepository<Result, Long>{ - Result save(Result result); - List<Result> findAllByMemberIdOrderByIdDesc(Long memberId); } diff --git a/howoldareu_clone/src/main/java/com/sopt/Server/service/MemberService.java b/howoldareu_clone/src/main/java/com/sopt/Server/service/MemberService.java index b61f781..b6c954a 100644 --- a/howoldareu_clone/src/main/java/com/sopt/Server/service/MemberService.java +++ b/howoldareu_clone/src/main/java/com/sopt/Server/service/MemberService.java @@ -1,16 +1,14 @@ package com.sopt.Server.service; -import com.sopt.Server.common.ApiResponse; +import com.sopt.Server.controller.request.MemberPostRequest; import com.sopt.Server.controller.response.MemberGetResponse; import com.sopt.Server.domain.Member; -import com.sopt.Server.exception.Success; import com.sopt.Server.repository.MemberJpaRepository; +import jakarta.persistence.EntityNotFoundException; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import java.util.Optional; - @Service @RequiredArgsConstructor @Transactional(readOnly = true) @@ -19,14 +17,17 @@ public class MemberService { private final MemberJpaRepository memberJpaRepository; @Transactional - public ApiResponse<MemberGetResponse> saveMember(String nickName, int age) { - Member newMember = Member.builder().name(nickName).realAge(age).build(); - Member member = memberJpaRepository.findByName(nickName).orElse(null);//null이면 - if(member != null)//있다면 - return ApiResponse.success(Success.GET_MEMBER_SUCCESS, MemberGetResponse.of(member)); - else { + public MemberGetResponse saveMember(MemberPostRequest request) { + try { + Member member = memberJpaRepository.findByNameOrThrow(request.nickName()); + return MemberGetResponse.of(member); + } catch (EntityNotFoundException e) { + Member newMember = Member.builder() + .name(request.nickName()) + .realAge(request.age()) + .build(); memberJpaRepository.save(newMember); + return MemberGetResponse.of(newMember); } - return ApiResponse.success(Success.CREATE_MEMBER_SUCCESS, MemberGetResponse.of(newMember)); } }