From 70809d8cb0b6334d80217808dfa20b1645e7eba3 Mon Sep 17 00:00:00 2001 From: seungryeol Date: Sun, 12 Nov 2023 02:46:31 +0900 Subject: [PATCH] =?UTF-8?q?[fix]=20=EB=8F=99=EA=B8=B0=20=EB=8B=A4=EB=8C=80?= =?UTF-8?q?=EB=8B=A4=20db=20=EC=88=98=EC=A0=95,=20=EB=8F=99=EA=B8=B0=20api?= =?UTF-8?q?=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../global/exception/fail/ErrorMessage.java | 5 +-- .../farmususer/user/entity/Motivation.java | 33 +++++++++++++++++++ .../user/entity/UserMotivation.java | 16 ++++++--- .../user/repository/MotivationRepository.java | 23 +++++++++++++ .../user/service/OnBoardingService.java | 15 +++++++-- 5 files changed, 82 insertions(+), 10 deletions(-) create mode 100644 src/main/java/modernfarmer/server/farmususer/user/entity/Motivation.java create mode 100644 src/main/java/modernfarmer/server/farmususer/user/repository/MotivationRepository.java diff --git a/src/main/java/modernfarmer/server/farmususer/global/exception/fail/ErrorMessage.java b/src/main/java/modernfarmer/server/farmususer/global/exception/fail/ErrorMessage.java index d219dc5..eb07736 100644 --- a/src/main/java/modernfarmer/server/farmususer/global/exception/fail/ErrorMessage.java +++ b/src/main/java/modernfarmer/server/farmususer/global/exception/fail/ErrorMessage.java @@ -9,8 +9,9 @@ public enum ErrorMessage { INTERVAL_SERVER_ERROR(1001, "요청을 처리하는 과정에서 서버가 예상하지 못한 오류가 발생하였습니다."), - REFRESH_NOTIFICATION_ERROR(4017, "Refresh Token 인증 오류"), - NO_USER_DATA(1002, "유저에 대한 정보가 없습니다."); + REFRESH_NOTIFICATION_ERROR(1002, "Refresh Token 인증 오류"), + NO_USER_DATA(1003, "유저에 대한 정보가 없습니다."), + NO_MOTIVATION_DATA(1004, "동기에 대한 정보가 없습니다."); diff --git a/src/main/java/modernfarmer/server/farmususer/user/entity/Motivation.java b/src/main/java/modernfarmer/server/farmususer/user/entity/Motivation.java new file mode 100644 index 0000000..4ae5584 --- /dev/null +++ b/src/main/java/modernfarmer/server/farmususer/user/entity/Motivation.java @@ -0,0 +1,33 @@ +package modernfarmer.server.farmususer.user.entity; + +import lombok.*; +import org.hibernate.annotations.OnDelete; +import org.hibernate.annotations.OnDeleteAction; + +import javax.persistence.*; +import javax.validation.constraints.NotNull; +import java.util.LinkedHashSet; +import java.util.Set; + +@Builder +@AllArgsConstructor +@NoArgsConstructor +@Getter +@Entity +@Table(name = "motivation") +public class Motivation extends BaseEntity{ + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "motivation_id", nullable = false) + private Long id; + + + @Column(name = "motivation_reason", nullable = false, length = 40) + private String motivationReason; + + @OneToMany(mappedBy = "motivation", fetch = FetchType.LAZY) + private Set userMotivations = new LinkedHashSet<>(); + + + +} \ No newline at end of file diff --git a/src/main/java/modernfarmer/server/farmususer/user/entity/UserMotivation.java b/src/main/java/modernfarmer/server/farmususer/user/entity/UserMotivation.java index 4dbbceb..c0d6d0f 100644 --- a/src/main/java/modernfarmer/server/farmususer/user/entity/UserMotivation.java +++ b/src/main/java/modernfarmer/server/farmususer/user/entity/UserMotivation.java @@ -6,8 +6,6 @@ import javax.persistence.*; import javax.validation.constraints.NotNull; -import javax.validation.constraints.Size; -import java.time.Instant; @Builder @AllArgsConstructor @@ -28,10 +26,18 @@ public class UserMotivation extends BaseEntity{ @JoinColumn(name = "user_id", nullable = false) private User user; - @Size(max = 40) @NotNull - @Column(name = "user_motivation", nullable = false, length = 40) - private String userMotivation; + @ManyToOne(fetch = FetchType.LAZY, optional = false) + @OnDelete(action = OnDeleteAction.CASCADE) + @JoinColumn(name = "motivation_id", nullable = false) + private Motivation motivation; + + + + + + + diff --git a/src/main/java/modernfarmer/server/farmususer/user/repository/MotivationRepository.java b/src/main/java/modernfarmer/server/farmususer/user/repository/MotivationRepository.java new file mode 100644 index 0000000..fcb6f50 --- /dev/null +++ b/src/main/java/modernfarmer/server/farmususer/user/repository/MotivationRepository.java @@ -0,0 +1,23 @@ +package modernfarmer.server.farmususer.user.repository; + + +import modernfarmer.server.farmususer.user.entity.Motivation; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; +import org.springframework.stereotype.Repository; + +import java.util.Optional; + +@Repository +public interface MotivationRepository extends JpaRepository { + + @Query("select m.id from Motivation as m where m.motivationReason = :motivationReason") + Long getMotivationId(@Param("motivationReason") String motivationReason); + + + Optional findByMotivationReason(String motivationReason); + + + +} diff --git a/src/main/java/modernfarmer/server/farmususer/user/service/OnBoardingService.java b/src/main/java/modernfarmer/server/farmususer/user/service/OnBoardingService.java index 9e5766a..92433e6 100644 --- a/src/main/java/modernfarmer/server/farmususer/user/service/OnBoardingService.java +++ b/src/main/java/modernfarmer/server/farmususer/user/service/OnBoardingService.java @@ -9,16 +9,17 @@ import modernfarmer.server.farmususer.user.dto.request.OnBoardingMotivationRequest; import modernfarmer.server.farmususer.user.dto.response.BaseResponseDto; import modernfarmer.server.farmususer.user.dto.response.OnBoardingLevelResponse; +import modernfarmer.server.farmususer.user.entity.Motivation; import modernfarmer.server.farmususer.user.entity.User; import modernfarmer.server.farmususer.user.entity.UserMotivation; +import modernfarmer.server.farmususer.user.repository.MotivationRepository; import modernfarmer.server.farmususer.user.repository.UserMotivationRepository; import modernfarmer.server.farmususer.user.repository.UserRepository; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import javax.transaction.Transactional; -import java.util.ArrayList; +import java.util.Optional; @RequiredArgsConstructor @@ -31,16 +32,24 @@ public class OnBoardingService { private final UserMotivationRepository userMotivationRepository; + private final MotivationRepository motivationRepository; + public BaseResponseDto onBoardingMotivation(Long userId, OnBoardingMotivationRequest onBoardingMotivationRequest){ User user = User.builder().id(userId).build(); for(String motivations : onBoardingMotivationRequest.getMotivation()){ + Optional motivation = motivationRepository.findByMotivationReason(motivations); + + if(motivation.isEmpty()){ + return BaseResponseDto.of(ErrorMessage.NO_MOTIVATION_DATA); + } + UserMotivation userMotivation = UserMotivation .builder() .user(user) - .userMotivation(motivations) + .motivation(motivation.get()) .build(); userMotivationRepository.save(userMotivation);