Skip to content

Commit dee2f5a

Browse files
author
Lee Euije
authored
YEL-172 [hotfix] 학과 친구 -> 학교 친구 수정
YEL-172 [hotfix] 학과 친구 -> 학교 친구 수정
2 parents f61da95 + 286167c commit dee2f5a

File tree

16 files changed

+143
-74
lines changed

16 files changed

+143
-74
lines changed

src/main/java/com/yello/server/domain/friend/service/FriendService.java

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -83,19 +83,14 @@ public List<FriendShuffleResponse> findShuffledFriend(Long userId) {
8383
public RecommendFriendResponse findAllRecommendSchoolFriends(Pageable pageable, Long userId) {
8484
final User user = userRepository.getById(userId);
8585

86-
List<User> recommendFriends =
87-
userRepository.findAllByGroupId(user.getGroup().getId())
86+
Integer size = userRepository.countAllByGroupNameFilteredByNotFriend(userId, user.getGroup().getGroupName());
87+
List<FriendResponse> recommendFriends =
88+
userRepository.findAllByGroupNameFilteredByNotFriend(userId, user.getGroup().getGroupName(), pageable)
8889
.stream()
89-
.filter(target -> !userId.equals(target.getId()))
90-
.filter(target -> !friendRepository.existsByUserAndTarget(userId, target.getId()))
90+
.map(FriendResponse::of)
9191
.toList();
9292

93-
List<FriendResponse> pageList = PaginationFactory.getPage(recommendFriends, pageable)
94-
.stream()
95-
.map(FriendResponse::of)
96-
.toList();
97-
98-
return RecommendFriendResponse.of(recommendFriends.size(), pageList);
93+
return RecommendFriendResponse.of(size, recommendFriends);
9994
}
10095

10196
@Transactional

src/main/java/com/yello/server/domain/user/repository/UserJpaRepository.java

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,25 @@ public interface UserJpaRepository extends JpaRepository<User, Long> {
4848
"and u.deletedAt is null")
4949
List<User> findAllByGroupId(@Param("groupId") Long groupId);
5050

51+
@Query("select count (u) from User u, UserGroup g " +
52+
"where u.group.id = g.id " +
53+
"and g.groupName = :groupName " +
54+
"and u.id <> :userId " +
55+
"and u.id not in (select f.target.id from Friend f where :userId = f.user.id and f.target.deletedAt is null) "
56+
+
57+
"and u.deletedAt is null")
58+
Integer countAllByGroupNameFilteredByNotFriend(@Param("userId") Long userId, @Param("groupName") String groupName);
59+
60+
@Query("select u from User u, UserGroup g " +
61+
"where u.group.id = g.id " +
62+
"and g.groupName = :groupName " +
63+
"and u.id <> :userId " +
64+
"and u.id not in (select f.target.id from Friend f where :userId = f.user.id and f.target.deletedAt is null) "
65+
+
66+
"and u.deletedAt is null")
67+
List<User> findAllByGroupNameFilteredByNotFriend(@Param("userId") Long userId,
68+
@Param("groupName") String groupName, Pageable pageable);
69+
5170
@Query("select u from User u "
5271
+ "where u.group.groupName = :groupName "
5372
+ "and u.uuid not in :uuidList "

src/main/java/com/yello/server/domain/user/repository/UserRepository.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,13 +38,16 @@ public interface UserRepository {
3838

3939
User getByDeviceTokenNotFiltered(String deviceToken);
4040

41-
4241
Optional<User> findByDeviceToken(String deviceToken);
4342

4443
Optional<User> findByDeviceTokenNotFiltered(String deviceToken);
4544

4645
List<User> findAllByGroupId(Long groupId);
4746

47+
Integer countAllByGroupNameFilteredByNotFriend(Long userId, String groupName);
48+
49+
List<User> findAllByGroupNameFilteredByNotFriend(Long userId, String groupName, Pageable pageable);
50+
4851
List<User> findAllByGroupContainingName(String groupName, String keyword,
4952
List<String> uuidList);
5053

src/main/java/com/yello/server/domain/user/repository/UserRepositoryImpl.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,16 @@ public List<User> findAllByGroupId(Long groupId) {
119119
return userJpaRepository.findAllByGroupId(groupId);
120120
}
121121

122+
@Override
123+
public Integer countAllByGroupNameFilteredByNotFriend(Long userId, String groupName) {
124+
return userJpaRepository.countAllByGroupNameFilteredByNotFriend(userId, groupName);
125+
}
126+
127+
@Override
128+
public List<User> findAllByGroupNameFilteredByNotFriend(Long userId, String groupName, Pageable pageable) {
129+
return userJpaRepository.findAllByGroupNameFilteredByNotFriend(userId, groupName, pageable);
130+
}
131+
122132
@Override
123133
public List<User> findAllByGroupContainingName(String groupName, String keyword,
124134
List<String> uuidList) {

src/test/java/com/yello/server/domain/authorization/small/AuthManagerTest.java

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -36,25 +36,21 @@
3636
@DisplayNameGeneration(ReplaceUnderscores.class)
3737
public class AuthManagerTest {
3838

39+
private final CooldownRepository cooldownRepository = new FakeCooldownRepository();
40+
private final FriendRepository friendRepository = new FakeFriendRepository();
41+
private final QuestionRepository questionRepository = new FakeQuestionRepository();
3942
private final String secretKey = Base64.getEncoder().encodeToString(
4043
"keyForTestkeyForTestkeyForTestkeyForTestkeyForTestkeyForTestkeyForTestkeyForTestkeyForTest".getBytes());
41-
42-
private final UserRepository userRepository = new FakeUserRepository();
43-
private final FriendRepository friendRepository = new FakeFriendRepository();
44-
private final CooldownRepository cooldownRepository = new FakeCooldownRepository();
44+
private final TokenProvider tokenProvider = new TokenJwtProvider(secretKey);
4545
private final TokenRepository tokenRepository = new FakeTokenRepository();
46-
private final QuestionRepository questionRepository = new FakeQuestionRepository();
46+
private final UserRepository userRepository = new FakeUserRepository(friendRepository);
4747
private final VoteRepository voteRepository = new FakeVoteRepository();
48-
4948
private final TestDataRepositoryUtil testDataUtil = new TestDataRepositoryUtil(
5049
userRepository,
5150
voteRepository,
5251
questionRepository,
5352
friendRepository
5453
);
55-
56-
private final TokenProvider tokenProvider = new TokenJwtProvider(secretKey);
57-
5854
private AuthManager authManager;
5955

6056
@BeforeEach

src/test/java/com/yello/server/domain/authorization/small/AuthServiceTest.java

Lines changed: 19 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -71,43 +71,38 @@
7171
@DisplayNameGeneration(ReplaceUnderscores.class)
7272
public class AuthServiceTest {
7373

74+
private final ConnectionManager connectionManager = new FakeConnectionManager();
75+
private final CooldownRepository cooldownRepository = new FakeCooldownRepository();
76+
private final FCMManager fcmManager = new FakeFcmManger();
77+
private final FriendRepository friendRepository = new FakeFriendRepository();
78+
private final MessageQueueRepository messageQueueRepository = new FakeMessageQueueRepository();
79+
private final QuestionRepository questionRepository = new FakeQuestionRepository();
7480
private final String secretKey = Base64.getEncoder().encodeToString(
7581
"keyForTestkeyForTestkeyForTestkeyForTestkeyForTestkeyForTestkeyForTestkeyForTestkeyForTest".getBytes());
76-
77-
private final UserRepository userRepository = new FakeUserRepository();
78-
private final UserGroupRepository userGroupRepository = new FakeUserGroupRepository();
79-
private final FriendRepository friendRepository = new FakeFriendRepository();
80-
private final CooldownRepository cooldownRepository = new FakeCooldownRepository();
82+
private final TokenProvider tokenProvider = new TokenJwtProvider(secretKey);
8183
private final TokenRepository tokenRepository = new FakeTokenRepository();
82-
private final QuestionRepository questionRepository = new FakeQuestionRepository();
84+
private final UserGroupRepository userGroupRepository = new FakeUserGroupRepository();
85+
private final UserRepository userRepository = new FakeUserRepository(friendRepository);
86+
private final UserManager userManager = new FakeUserManager(userRepository);
87+
private final FriendManager friendManager = new FakeFriendManager(userRepository);
88+
private final NotificationService notificationService = NotificationFcmService.builder()
89+
.userRepository(userRepository)
90+
.tokenRepository(tokenRepository)
91+
.fcmManager(fcmManager)
92+
.build();
93+
private final AuthManager authManager = new FakeAuthManager(
94+
friendRepository, cooldownRepository, userRepository, tokenRepository, tokenProvider
95+
);
8396
private final VoteRepository voteRepository = new FakeVoteRepository();
84-
private final MessageQueueRepository messageQueueRepository = new FakeMessageQueueRepository();
85-
8697
private final TestDataRepositoryUtil testDataUtil = new TestDataRepositoryUtil(
8798
userRepository,
8899
voteRepository,
89100
questionRepository,
90101
friendRepository
91102
);
92-
93-
private final TokenProvider tokenProvider = new TokenJwtProvider(secretKey);
94-
private final AuthManager authManager = new FakeAuthManager(
95-
friendRepository, cooldownRepository, userRepository, tokenRepository, tokenProvider
96-
);
97-
private final UserManager userManager = new FakeUserManager(userRepository);
98103
private final VoteManager voteManager = new FakeVoteManager(
99104
userRepository, questionRepository, voteRepository, friendRepository,
100105
userManager);
101-
private final FriendManager friendManager = new FakeFriendManager(userRepository);
102-
private final ConnectionManager connectionManager = new FakeConnectionManager();
103-
private final FCMManager fcmManager = new FakeFcmManger();
104-
105-
private final NotificationService notificationService = NotificationFcmService.builder()
106-
.userRepository(userRepository)
107-
.tokenRepository(tokenRepository)
108-
.fcmManager(fcmManager)
109-
.build();
110-
111106
private AuthService authService;
112107

113108
@BeforeEach

src/test/java/com/yello/server/domain/friend/small/FriendManagerTest.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
import static org.assertj.core.api.Assertions.assertThat;
44

5+
import com.yello.server.domain.friend.FakeFriendRepository;
6+
import com.yello.server.domain.friend.repository.FriendRepository;
57
import com.yello.server.domain.friend.service.FriendManager;
68
import com.yello.server.domain.friend.service.FriendManagerImpl;
79
import com.yello.server.domain.group.entity.UserGroup;
@@ -22,7 +24,8 @@
2224
@DisplayNameGeneration(ReplaceUnderscores.class)
2325
public class FriendManagerTest {
2426

25-
private final UserRepository userRepository = new FakeUserRepository();
27+
private final FriendRepository friendRepository = new FakeFriendRepository();
28+
private final UserRepository userRepository = new FakeUserRepository(friendRepository);
2629

2730
private FriendManager friendManager;
2831

src/test/java/com/yello/server/domain/friend/small/FriendServiceTest.java

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -43,11 +43,11 @@
4343
@DisplayNameGeneration(ReplaceUnderscores.class)
4444
class FriendServiceTest {
4545

46-
private final UserRepository userRepository = new FakeUserRepository();
4746
private final FriendRepository friendRepository = new FakeFriendRepository();
48-
private final VoteRepository voteRepository = new FakeVoteRepository();
4947
private final QuestionRepository questionRepository = new FakeQuestionRepository();
48+
private final UserRepository userRepository = new FakeUserRepository(friendRepository);
5049
private final UserManager userManager = new FakeUserManager(userRepository);
50+
private final VoteRepository voteRepository = new FakeVoteRepository();
5151
private final VoteManager voteManager =
5252
new FakeVoteManager(userRepository, questionRepository, voteRepository, friendRepository,
5353
userManager);
@@ -57,7 +57,6 @@ class FriendServiceTest {
5757
questionRepository,
5858
friendRepository
5959
);
60-
6160
private FriendService friendService;
6261
private User user1;
6362
private User user2;
@@ -82,6 +81,9 @@ void init() {
8281

8382
testDataUtil.generateFriend(user1, user2);
8483
testDataUtil.generateFriend(user2, user1);
84+
85+
testDataUtil.generateFriend(user1, user3);
86+
testDataUtil.generateFriend(user3, user1);
8587
}
8688

8789
@Test
@@ -95,23 +97,23 @@ void init() {
9597
final FriendsResponse friends = friendService.findAllFriends(pageable, userId);
9698

9799
// then
98-
assertThat(friends.totalCount()).isEqualTo(1);
100+
assertThat(friends.totalCount()).isEqualTo(2);
99101
assertThat(friends.friends().get(0).name()).isEqualTo("name2");
100102
}
101103

102104
@Test
103105
void 친구_추가에_성공합니다() {
104106
// given
105107
final Long userId = 1L;
106-
final Long targetId = 3L;
108+
final Long targetId = 4L;
107109

108110
// when
109111
friendService.addFriend(userId, targetId);
110112
final Friend friend = friendRepository.getByUserAndTarget(userId, targetId);
111113

112114
// then
113115
assertThat(friend.getUser().getName()).isEqualTo("name1");
114-
assertThat(friend.getTarget().getName()).isEqualTo("name3");
116+
assertThat(friend.getTarget().getName()).isEqualTo("name4");
115117
}
116118

117119
@Test
@@ -173,7 +175,7 @@ void init() {
173175
@Test
174176
void 친구_셔플_시_친구_수가_부족한_경우에_FriendException이_발생합니다() {
175177
// given
176-
final Long userId = 3L;
178+
final Long userId = 4L;
177179

178180
// when
179181
// then
@@ -197,7 +199,7 @@ void init() {
197199
);
198200

199201
// then
200-
assertThat(recommendSchoolFriends.totalCount()).isEqualTo(3);
202+
assertThat(recommendSchoolFriends.totalCount()).isEqualTo(2);
201203
}
202204

203205
@Test
@@ -261,7 +263,7 @@ void init() {
261263
);
262264

263265
// then
264-
assertThat(allRecommendKakaoFriends.totalCount()).isEqualTo(3);
266+
assertThat(allRecommendKakaoFriends.totalCount()).isEqualTo(2);
265267
}
266268

267269
@Test

src/test/java/com/yello/server/domain/purchase/small/PurchaseServiceTest.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
import static org.assertj.core.api.Assertions.assertThat;
44

5+
import com.yello.server.domain.friend.FakeFriendRepository;
6+
import com.yello.server.domain.friend.repository.FriendRepository;
57
import com.yello.server.domain.group.entity.UserGroup;
68
import com.yello.server.domain.purchase.FakeAppleApiWebClient;
79
import com.yello.server.domain.purchase.FakePurchaseManager;
@@ -34,7 +36,8 @@
3436
@DisplayNameGeneration(ReplaceUnderscores.class)
3537
public class PurchaseServiceTest {
3638

37-
private final UserRepository userRepository = new FakeUserRepository();
39+
private final FriendRepository friendRepository = new FakeFriendRepository();
40+
private final UserRepository userRepository = new FakeUserRepository(friendRepository);
3841
private final PurchaseRepository purchaseRepository = new FakePurchaseRepository();
3942
private final TokenFactory tokenFactory = new FakeTokenFactory();
4043
private final ApiWebClient apiWebClient = new FakeAppleApiWebClient(tokenFactory);

src/test/java/com/yello/server/domain/user/FakeUserRepository.java

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import static com.yello.server.global.common.ErrorCode.USERID_NOT_FOUND_USER_EXCEPTION;
66
import static com.yello.server.global.common.ErrorCode.YELLOID_NOT_FOUND_USER_EXCEPTION;
77

8+
import com.yello.server.domain.friend.repository.FriendRepository;
89
import com.yello.server.domain.user.entity.User;
910
import com.yello.server.domain.user.exception.UserNotFoundException;
1011
import com.yello.server.domain.user.repository.UserRepository;
@@ -20,6 +21,12 @@ public class FakeUserRepository implements UserRepository {
2021
private final List<User> data = new ArrayList<>();
2122
private Long id = 0L;
2223

24+
private FriendRepository friendRepository;
25+
26+
public FakeUserRepository(FriendRepository friendRepository) {
27+
this.friendRepository = friendRepository;
28+
}
29+
2330
@Override
2431
public User save(User user) {
2532
if (user.getId() != null && user.getId() > id) {
@@ -176,6 +183,41 @@ public List<User> findAllByGroupId(Long groupId) {
176183
.toList();
177184
}
178185

186+
@Override
187+
public Integer countAllByGroupNameFilteredByNotFriend(Long userId, String groupName) {
188+
return data.stream()
189+
.filter(user -> !user.getId().equals(userId))
190+
.filter(user -> user.getGroup().getGroupName().equals(groupName))
191+
.filter(user ->
192+
!friendRepository.findAllByUserId(userId).stream()
193+
.filter(friend -> friend.getTarget().getDeletedAt() == null)
194+
.map(friend -> friend.getTarget().getId())
195+
.toList()
196+
.contains(user.getId())
197+
)
198+
.filter(user -> user.getDeletedAt() == null)
199+
.toList()
200+
.size();
201+
}
202+
203+
@Override
204+
public List<User> findAllByGroupNameFilteredByNotFriend(Long userId, String groupName, Pageable pageable) {
205+
return data.stream()
206+
.filter(user -> !user.getId().equals(userId))
207+
.filter(user -> user.getGroup().getGroupName().equals(groupName))
208+
.filter(user ->
209+
!friendRepository.findAllByUserId(userId).stream()
210+
.filter(friend -> friend.getTarget().getDeletedAt() != null)
211+
.map(friend -> friend.getTarget().getId())
212+
.toList()
213+
.contains(user.getId())
214+
)
215+
.filter(user -> user.getDeletedAt() != null)
216+
.skip(pageable.getOffset())
217+
.limit(pageable.getPageSize())
218+
.toList();
219+
}
220+
179221
@Override
180222
public List<User> findAllByGroupContainingName(String groupName, String keyword,
181223
List<String> uuidList) {

0 commit comments

Comments
 (0)