From c7e58668e17658db8a0f13a5c73cc4d5f9a23ae3 Mon Sep 17 00:00:00 2001 From: imscow11253 Date: Thu, 30 Jan 2025 00:51:34 +0900 Subject: [PATCH 1/3] =?UTF-8?q?hotfix=20:=20=EA=B3=B5=EC=9C=A0=ED=95=98?= =?UTF-8?q?=EA=B8=B0=20=ED=8E=98=EC=9D=B4=EC=A7=80=20=EC=A1=B0=ED=9A=8C=20?= =?UTF-8?q?API=20=EC=98=A4=EB=A5=98=20=ED=95=B4=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sharing/service/SharingService.java | 11 +++++--- .../domain/letter/service/CreateLetter.java | 12 ++++++++- .../tohero/domain/domain/user/model/User.java | 8 ++++-- .../tohero/domain/query/UserRepository.java | 1 + .../entity/RecommendEntity.java | 7 +++++ .../infrastructure/mapper/UserMapper.java | 5 +++- .../query/impl/UserRepositoryImpl.java | 27 +++++++++++++++++++ 7 files changed, 63 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/neighbors/tohero/application/sharing/service/SharingService.java b/src/main/java/com/neighbors/tohero/application/sharing/service/SharingService.java index 97d9db8..a510a52 100644 --- a/src/main/java/com/neighbors/tohero/application/sharing/service/SharingService.java +++ b/src/main/java/com/neighbors/tohero/application/sharing/service/SharingService.java @@ -15,6 +15,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import java.util.Objects; @Service @RequiredArgsConstructor @@ -38,14 +39,16 @@ public BaseResponse getRecommenderCode(String userEm public BaseResponse getSharingPageInfo(long userId){ User user = getUser.getUserForSharing(userId); - String recommendedPeopleName = user.getRecommenders(); - List recommendedPeopleNameList = new ArrayList<>(Arrays.asList(recommendedPeopleName - .split(","))); + List recommendedPeopleName = user.getNameOfRecommendedWriter(); + + if(recommendedPeopleName.size() == 1 && Objects.equals(recommendedPeopleName.get(0), "")){ + recommendedPeopleName = new ArrayList<>(); + } return new BaseResponse<>( BaseResponseStatus.OK, BaseResponseMessage.공유하기_페이지_조회가_성공했습니다.getMessage(), - new GetSharingPageInfoResponse(user.isFirstSharing(), recommendedPeopleNameList.size(), recommendedPeopleNameList) + new GetSharingPageInfoResponse(user.isFirstSharing(), recommendedPeopleName.size(), recommendedPeopleName) ); } diff --git a/src/main/java/com/neighbors/tohero/domain/domain/letter/service/CreateLetter.java b/src/main/java/com/neighbors/tohero/domain/domain/letter/service/CreateLetter.java index 49d6315..5650f5a 100644 --- a/src/main/java/com/neighbors/tohero/domain/domain/letter/service/CreateLetter.java +++ b/src/main/java/com/neighbors/tohero/domain/domain/letter/service/CreateLetter.java @@ -13,6 +13,7 @@ import com.neighbors.tohero.domain.query.UserRepository; import lombok.RequiredArgsConstructor; +import java.util.ArrayList; import java.util.List; @DomainService @@ -53,7 +54,7 @@ public long createLetter(long userId, String writer, CreateLetterRequest createL } Letter createdLetter = letterRepository.createLetter(newLetter); - reflectRecommendation(writer, createLetterRequest.recommenderCode()); + reflectRecommendation(user, writer, createLetterRequest.recommenderCode()); return createdLetter.getLetterId(); } @@ -100,4 +101,13 @@ private void reflectRecommendation(String writer, String recommenderCode){ userRepository.reflectRecommendation(writer, recommenderEmails); } } + + private void reflectRecommendation(User user, String writer, String recommenderCode){ + if(recommenderCode != null){ + String recommenderEmailsDividedBySlash = jwtProvider.getRecommenderEmails(recommenderCode); + List recommenderEmails = List.of(recommenderEmailsDividedBySlash.split("/")); + userRepository.reflectRecommendation(writer, recommenderEmails); + userRepository.updateUserRecommenders(user, recommenderEmailsDividedBySlash); + } + } } diff --git a/src/main/java/com/neighbors/tohero/domain/domain/user/model/User.java b/src/main/java/com/neighbors/tohero/domain/domain/user/model/User.java index 35d313c..c78b9a5 100644 --- a/src/main/java/com/neighbors/tohero/domain/domain/user/model/User.java +++ b/src/main/java/com/neighbors/tohero/domain/domain/user/model/User.java @@ -7,6 +7,8 @@ import lombok.Getter; import lombok.Setter; +import java.util.List; + @Builder @Getter @AllArgsConstructor @@ -15,12 +17,14 @@ public class User { private String userName; private String email; private Role role; + @Setter private String recommenders; @Setter private boolean isFirstSharing; + private List nameOfRecommendedWriter; - public static User of (Long userId, String userName, String email, Role role, String recommenders, boolean isFirstSharing) { - return new User(userId, userName, email, role, recommenders, isFirstSharing); + public static User of (Long userId, String userName, String email, Role role, String recommenders, boolean isFirstSharing, List nameOfRecommendedWriter) { + return new User(userId, userName, email, role, recommenders, isFirstSharing, nameOfRecommendedWriter); } public static User toEntity(AuthenticateUserRequest authenticateUserRequest) { diff --git a/src/main/java/com/neighbors/tohero/domain/query/UserRepository.java b/src/main/java/com/neighbors/tohero/domain/query/UserRepository.java index 58328a2..00378da 100644 --- a/src/main/java/com/neighbors/tohero/domain/query/UserRepository.java +++ b/src/main/java/com/neighbors/tohero/domain/query/UserRepository.java @@ -16,4 +16,5 @@ public interface UserRepository { void deleteUser(Consumer findUserConsumer); void reflectRecommendation(String writer, List recommenderEmails); User getUserForSharing(Function> findUserFunction); + void updateUserRecommenders(User user, String recommenderEmailsDividedBySlash); } diff --git a/src/main/java/com/neighbors/tohero/infrastructure/entity/RecommendEntity.java b/src/main/java/com/neighbors/tohero/infrastructure/entity/RecommendEntity.java index 4096202..2a99843 100644 --- a/src/main/java/com/neighbors/tohero/infrastructure/entity/RecommendEntity.java +++ b/src/main/java/com/neighbors/tohero/infrastructure/entity/RecommendEntity.java @@ -33,4 +33,11 @@ public void addRecommendedPeopleName(String recommendedPeopleName){ } this.recommendedPeopleName = recommendedPeopleName; } + + public String getRecommendedPeopleName(){ + if(recommendedPeopleName == null){ + return ""; + } + return recommendedPeopleName; + } } diff --git a/src/main/java/com/neighbors/tohero/infrastructure/mapper/UserMapper.java b/src/main/java/com/neighbors/tohero/infrastructure/mapper/UserMapper.java index 3f4e9f0..25e3ca0 100644 --- a/src/main/java/com/neighbors/tohero/infrastructure/mapper/UserMapper.java +++ b/src/main/java/com/neighbors/tohero/infrastructure/mapper/UserMapper.java @@ -5,6 +5,8 @@ import com.neighbors.tohero.infrastructure.entity.UserEntity; import org.springframework.stereotype.Component; +import java.util.Arrays; + @Component public class UserMapper { public UserEntity toNewEntity(User user){ @@ -27,7 +29,8 @@ public User toDomain(UserEntity userEntity){ userEntity.getEmail(), userEntity.getRole(), userEntity.getRecommenders(), - userEntity.isFirstSharing() + userEntity.isFirstSharing(), + Arrays.stream(userEntity.getRecommendEntity().getRecommendedPeopleName().split(",")).toList() ); } } diff --git a/src/main/java/com/neighbors/tohero/infrastructure/query/impl/UserRepositoryImpl.java b/src/main/java/com/neighbors/tohero/infrastructure/query/impl/UserRepositoryImpl.java index 5bf52f2..142051f 100644 --- a/src/main/java/com/neighbors/tohero/infrastructure/query/impl/UserRepositoryImpl.java +++ b/src/main/java/com/neighbors/tohero/infrastructure/query/impl/UserRepositoryImpl.java @@ -103,4 +103,31 @@ public User getUserForSharing(Function existedRecommendersEmail = Arrays.stream(user.getRecommenders().split("/")).toList(); + List addedRecommendersEmail = Arrays.stream(recommenderEmailsDividedBySlash.split("/")).toList(); + + String result = user.getRecommenders() + "/" + recommenderEmailsDividedBySlash; + if(existedRecommendersEmail.size() + addedRecommendersEmail.size() > 5){ + existedRecommendersEmail.addAll(addedRecommendersEmail); + + int size = existedRecommendersEmail.size(); + List lastFive = existedRecommendersEmail.subList(Math.max(0, size - 5), size); + + result = String.join("/", lastFive); + } + user.setRecommenders(result); + } } From 7e17ffff27f154e3a0739441d12b678ff0b64986 Mon Sep 17 00:00:00 2001 From: imscow11253 Date: Thu, 30 Jan 2025 02:01:53 +0900 Subject: [PATCH 2/3] =?UTF-8?q?refactor=20:=20=EA=B3=B5=EC=9C=A0=ED=95=98?= =?UTF-8?q?=EA=B8=B0=20=ED=96=88=EC=9D=84=20=EB=95=8C=205=EB=AA=85=20?= =?UTF-8?q?=EC=9D=B4=EC=A0=84=EA=B9=8C=EC=A7=80=20=EB=B3=BC=20=EC=88=98=20?= =?UTF-8?q?=EC=9E=88=EB=8F=84=EB=A1=9D=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/letter/service/CreateLetter.java | 7 +++-- .../tohero/domain/query/UserRepository.java | 2 +- .../infrastructure/entity/UserEntity.java | 5 +-- .../infrastructure/mapper/UserMapper.java | 11 ++++++- .../query/impl/UserRepositoryImpl.java | 31 ++++++++++++------- .../repository/RecommendEntityRepository.java | 3 ++ 6 files changed, 40 insertions(+), 19 deletions(-) diff --git a/src/main/java/com/neighbors/tohero/domain/domain/letter/service/CreateLetter.java b/src/main/java/com/neighbors/tohero/domain/domain/letter/service/CreateLetter.java index 5650f5a..d5bdaf7 100644 --- a/src/main/java/com/neighbors/tohero/domain/domain/letter/service/CreateLetter.java +++ b/src/main/java/com/neighbors/tohero/domain/domain/letter/service/CreateLetter.java @@ -26,7 +26,11 @@ public class CreateLetter { private final JwtProvider jwtProvider; public long createLetter(long userId, String writer, CreateLetterRequest createLetterRequest){ - User user = userRepository.getUser(repo -> repo.findByUserId(userId)); + String recommenderEmailDividedBySlash = null; + if(createLetterRequest.recommenderCode() != null){ + recommenderEmailDividedBySlash = jwtProvider.getRecommenderEmails(createLetterRequest.recommenderCode()); + } + User user = userRepository.getUserAndUpdateRecommenders(repo -> repo.findByUserId(userId), recommenderEmailDividedBySlash); Letter newLetter; try{ Address address = addressRepository.getAddressById(createLetterRequest.addressId()); @@ -107,7 +111,6 @@ private void reflectRecommendation(User user, String writer, String recommenderC String recommenderEmailsDividedBySlash = jwtProvider.getRecommenderEmails(recommenderCode); List recommenderEmails = List.of(recommenderEmailsDividedBySlash.split("/")); userRepository.reflectRecommendation(writer, recommenderEmails); - userRepository.updateUserRecommenders(user, recommenderEmailsDividedBySlash); } } } diff --git a/src/main/java/com/neighbors/tohero/domain/query/UserRepository.java b/src/main/java/com/neighbors/tohero/domain/query/UserRepository.java index 00378da..13fee0b 100644 --- a/src/main/java/com/neighbors/tohero/domain/query/UserRepository.java +++ b/src/main/java/com/neighbors/tohero/domain/query/UserRepository.java @@ -16,5 +16,5 @@ public interface UserRepository { void deleteUser(Consumer findUserConsumer); void reflectRecommendation(String writer, List recommenderEmails); User getUserForSharing(Function> findUserFunction); - void updateUserRecommenders(User user, String recommenderEmailsDividedBySlash); + User getUserAndUpdateRecommenders(Function> findUserFunction, String recommenderCode); } diff --git a/src/main/java/com/neighbors/tohero/infrastructure/entity/UserEntity.java b/src/main/java/com/neighbors/tohero/infrastructure/entity/UserEntity.java index 126bbaf..8381a30 100644 --- a/src/main/java/com/neighbors/tohero/infrastructure/entity/UserEntity.java +++ b/src/main/java/com/neighbors/tohero/infrastructure/entity/UserEntity.java @@ -35,6 +35,7 @@ public class UserEntity extends BaseEntity { @Column(name = "recommenders", nullable = true) private String recommenders; + @Setter @OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL) @JoinColumn(name = "recommend_id", nullable = true) private RecommendEntity recommendEntity; @@ -64,8 +65,4 @@ public String getRecommenders() { if(recommenders == null) return ""; return recommenders; } - - public void setRecommenders(RecommendEntity recommendEntity) { - this.recommendEntity = recommendEntity; - } } diff --git a/src/main/java/com/neighbors/tohero/infrastructure/mapper/UserMapper.java b/src/main/java/com/neighbors/tohero/infrastructure/mapper/UserMapper.java index 25e3ca0..020e3a1 100644 --- a/src/main/java/com/neighbors/tohero/infrastructure/mapper/UserMapper.java +++ b/src/main/java/com/neighbors/tohero/infrastructure/mapper/UserMapper.java @@ -5,7 +5,9 @@ import com.neighbors.tohero.infrastructure.entity.UserEntity; import org.springframework.stereotype.Component; +import java.util.ArrayList; import java.util.Arrays; +import java.util.List; @Component public class UserMapper { @@ -23,6 +25,13 @@ public UserEntity toEntity(User user){ } public User toDomain(UserEntity userEntity){ + List nameOfRecommendedWriter; + if(userEntity.getRecommendEntity() == null){ + nameOfRecommendedWriter = new ArrayList<>(); + } + else{ + nameOfRecommendedWriter = Arrays.stream(userEntity.getRecommendEntity().getRecommendedPeopleName().split(",")).toList(); + } return User.of( userEntity.getUserId(), userEntity.getNickName(), @@ -30,7 +39,7 @@ public User toDomain(UserEntity userEntity){ userEntity.getRole(), userEntity.getRecommenders(), userEntity.isFirstSharing(), - Arrays.stream(userEntity.getRecommendEntity().getRecommendedPeopleName().split(",")).toList() + nameOfRecommendedWriter ); } } diff --git a/src/main/java/com/neighbors/tohero/infrastructure/query/impl/UserRepositoryImpl.java b/src/main/java/com/neighbors/tohero/infrastructure/query/impl/UserRepositoryImpl.java index 142051f..fb4edf4 100644 --- a/src/main/java/com/neighbors/tohero/infrastructure/query/impl/UserRepositoryImpl.java +++ b/src/main/java/com/neighbors/tohero/infrastructure/query/impl/UserRepositoryImpl.java @@ -13,7 +13,6 @@ import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Repository; -import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Optional; @@ -35,7 +34,7 @@ public User createUser(User user) { }catch(UserException e){ UserEntity userEntity = userMapper.toNewEntity(user); RecommendEntity recommendEntity = new RecommendEntity(userEntity); - userEntity.setRecommenders(recommendEntity); + userEntity.setRecommendEntity(recommendEntity); userEntityRepository.save(userEntity); UserEntity createdUserEntity = userEntityRepository.findByEmail(user.getEmail()) @@ -105,21 +104,31 @@ public User getUserForSharing(Function> findUserFunction, String recommenderCode) { + UserEntity userEntity = getUserEntity(findUserFunction); + + if(recommenderCode != null && !recommenderCode.isEmpty()){ + updateUserRecommenders(userEntity, recommenderCode); + } + + return userMapper.toDomain(userEntity); + } + + private void updateUserRecommenders(UserEntity userEntity, String recommenderEmailsDividedBySlash) { + if(userEntity.getRecommenders().isEmpty()){ + userEntity.setRecommenders(recommenderEmailsDividedBySlash); } else{ - queueingUserRecommenders(user, recommenderEmailsDividedBySlash); + queueingUserRecommenders(userEntity, recommenderEmailsDividedBySlash); } - userEntityRepository.save(userMapper.toEntity(user)); + userEntityRepository.save(userEntity); } - private void queueingUserRecommenders(User user, String recommenderEmailsDividedBySlash) { - List existedRecommendersEmail = Arrays.stream(user.getRecommenders().split("/")).toList(); + private void queueingUserRecommenders(UserEntity userEntity, String recommenderEmailsDividedBySlash) { + List existedRecommendersEmail = new java.util.ArrayList<>(Arrays.stream(userEntity.getRecommenders().split("/")).toList()); List addedRecommendersEmail = Arrays.stream(recommenderEmailsDividedBySlash.split("/")).toList(); - String result = user.getRecommenders() + "/" + recommenderEmailsDividedBySlash; + String result = userEntity.getRecommenders() + "/" + recommenderEmailsDividedBySlash; if(existedRecommendersEmail.size() + addedRecommendersEmail.size() > 5){ existedRecommendersEmail.addAll(addedRecommendersEmail); @@ -128,6 +137,6 @@ private void queueingUserRecommenders(User user, String recommenderEmailsDivided result = String.join("/", lastFive); } - user.setRecommenders(result); + userEntity.setRecommenders(result); } } diff --git a/src/main/java/com/neighbors/tohero/infrastructure/repository/RecommendEntityRepository.java b/src/main/java/com/neighbors/tohero/infrastructure/repository/RecommendEntityRepository.java index dbbf323..50e54f4 100644 --- a/src/main/java/com/neighbors/tohero/infrastructure/repository/RecommendEntityRepository.java +++ b/src/main/java/com/neighbors/tohero/infrastructure/repository/RecommendEntityRepository.java @@ -12,4 +12,7 @@ public interface RecommendEntityRepository extends JpaRepository { @Query("SELECT re FROM RecommendEntity re WHERE re.userEntity.email IN :emails") List findAllByUserEmailIn(@Param("emails") List emails); + + @Query("SELECT re FROM RecommendEntity re WHERE re.userEntity.userId = :userId") + RecommendEntity findByUserId(@Param("userId") Long userId); } From 0e6f8bd856be30662503ebe8dc4dc31ad91d2ad6 Mon Sep 17 00:00:00 2001 From: imscow11253 Date: Thu, 30 Jan 2025 03:24:36 +0900 Subject: [PATCH 3/3] =?UTF-8?q?refactor=20:=20=EA=B3=B5=EC=9C=A0=ED=95=98?= =?UTF-8?q?=EA=B8=B0=20=EB=B0=9B=EC=9D=80=20=EC=82=AC=EB=9E=8C=EB=8F=84=20?= =?UTF-8?q?=EB=B3=B4=EB=82=B8=20=EC=82=AC=EB=9E=8C=20=EB=8B=89=EB=84=A4?= =?UTF-8?q?=EC=9E=84=20=EB=9C=A8=EB=8F=84=EB=A1=9D=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tohero/infrastructure/query/impl/UserRepositoryImpl.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/main/java/com/neighbors/tohero/infrastructure/query/impl/UserRepositoryImpl.java b/src/main/java/com/neighbors/tohero/infrastructure/query/impl/UserRepositoryImpl.java index fb4edf4..95ce92d 100644 --- a/src/main/java/com/neighbors/tohero/infrastructure/query/impl/UserRepositoryImpl.java +++ b/src/main/java/com/neighbors/tohero/infrastructure/query/impl/UserRepositoryImpl.java @@ -121,6 +121,11 @@ private void updateUserRecommenders(UserEntity userEntity, String recommenderEma else{ queueingUserRecommenders(userEntity, recommenderEmailsDividedBySlash); } + + //이전 사람 이름 저장 + String lastUserEmail = recommenderEmailsDividedBySlash.split("/")[recommenderEmailsDividedBySlash.split("/").length - 1]; + UserEntity lastUserEntity = getUserEntity(repo -> repo.findByEmail(lastUserEmail)); + userEntity.getRecommendEntity().addRecommendedPeopleName(lastUserEntity.getNickName()); userEntityRepository.save(userEntity); }