|
13 | 13 | import lombok.RequiredArgsConstructor; |
14 | 14 | import org.springframework.stereotype.Repository; |
15 | 15 |
|
16 | | -import java.util.Arrays; |
17 | | -import java.util.List; |
18 | | -import java.util.Optional; |
| 16 | +import java.util.*; |
19 | 17 | import java.util.function.Consumer; |
20 | 18 | import java.util.function.Function; |
21 | 19 |
|
@@ -90,6 +88,24 @@ public void reflectRecommendation(String writer, List<String> recommenderEmails) |
90 | 88 | recommendEntityRepository.saveAll(recommendEntities); |
91 | 89 | } |
92 | 90 |
|
| 91 | + @Override |
| 92 | + public void reflectRecommendation(String writer, List<String> recommenderEmails, long userId) { |
| 93 | + List<RecommendEntity> recommendEntities = recommendEntityRepository.findAllByUserEmailIn(recommenderEmails); |
| 94 | + |
| 95 | + String userIdStr = String.valueOf(userId); |
| 96 | + recommendEntities.stream() |
| 97 | + .filter(entity -> |
| 98 | + Arrays.stream(entity.getRecommendedPeopleId().split(",")) |
| 99 | + .noneMatch(id -> id.equals(userIdStr)) |
| 100 | + ) |
| 101 | + .forEach(entity -> { |
| 102 | + entity.addRecommendedPeopleId(userId); |
| 103 | + entity.addRecommendedPeopleName(writer); |
| 104 | + }); |
| 105 | + |
| 106 | + recommendEntityRepository.saveAll(recommendEntities); |
| 107 | + } |
| 108 | + |
93 | 109 | @Override |
94 | 110 | public User getUserForSharing(Function<UserEntityRepository, Optional<UserEntity>> findUserFunction) { |
95 | 111 | UserEntity matchedUserEntity = getUserEntity(findUserFunction); |
@@ -125,23 +141,32 @@ private void updateUserRecommenders(UserEntity userEntity, String recommenderEma |
125 | 141 | //이전 사람 이름 저장 |
126 | 142 | String lastUserEmail = recommenderEmailsDividedBySlash.split("/")[recommenderEmailsDividedBySlash.split("/").length - 1]; |
127 | 143 | UserEntity lastUserEntity = getUserEntity(repo -> repo.findByEmail(lastUserEmail)); |
128 | | - userEntity.getRecommendEntity().addRecommendedPeopleName(lastUserEntity.getNickName()); |
| 144 | + |
| 145 | + boolean isNotExistId = false; |
| 146 | + isNotExistId = Arrays.stream(userEntity.getRecommendEntity().getRecommendedPeopleId().split(",")) |
| 147 | + .noneMatch(id -> id.equals(String.valueOf(lastUserEntity.getUserId()))); |
| 148 | + |
| 149 | + if(isNotExistId){ |
| 150 | + userEntity.getRecommendEntity().addRecommendedPeopleName(lastUserEntity.getNickName()); |
| 151 | + userEntity.getRecommendEntity().addRecommendedPeopleId(lastUserEntity.getUserId()); |
| 152 | + } |
129 | 153 | userEntityRepository.save(userEntity); |
130 | 154 | } |
131 | 155 |
|
132 | 156 | private void queueingUserRecommenders(UserEntity userEntity, String recommenderEmailsDividedBySlash) { |
133 | | - List<String> existedRecommendersEmail = new java.util.ArrayList<>(Arrays.stream(userEntity.getRecommenders().split("/")).toList()); |
134 | | - List<String> addedRecommendersEmail = Arrays.stream(recommenderEmailsDividedBySlash.split("/")).toList(); |
| 157 | + List<String> existedRecommendersEmail = new ArrayList<>(Arrays.asList(userEntity.getRecommenders().split("/"))); |
| 158 | + List<String> addedRecommendersEmail = Arrays.asList(recommenderEmailsDividedBySlash.split("/")); |
135 | 159 |
|
136 | | - String result = userEntity.getRecommenders() + "/" + recommenderEmailsDividedBySlash; |
137 | | - if(existedRecommendersEmail.size() + addedRecommendersEmail.size() > 5){ |
138 | | - existedRecommendersEmail.addAll(addedRecommendersEmail); |
| 160 | + // 순서를 유지하며 중복 제거 |
| 161 | + LinkedHashSet<String> uniqueEmails = new LinkedHashSet<>(existedRecommendersEmail); |
| 162 | + uniqueEmails.addAll(addedRecommendersEmail); |
139 | 163 |
|
140 | | - int size = existedRecommendersEmail.size(); |
141 | | - List<String> lastFive = existedRecommendersEmail.subList(Math.max(0, size - 5), size); |
| 164 | + // 마지막 5개만 유지 |
| 165 | + List<String> lastFive = new ArrayList<>(uniqueEmails); |
| 166 | + int size = lastFive.size(); |
| 167 | + List<String> resultEmails = lastFive.subList(Math.max(0, size - 5), size); |
142 | 168 |
|
143 | | - result = String.join("/", lastFive); |
144 | | - } |
145 | | - userEntity.setRecommenders(result); |
| 169 | + // 추천인 리스트 업데이트 |
| 170 | + userEntity.setRecommenders(String.join("/", resultEmails)); |
146 | 171 | } |
147 | 172 | } |
0 commit comments