Skip to content

Commit

Permalink
YEL-172 [feat] 학과 친구 -> 학교 친구 수정
Browse files Browse the repository at this point in the history
YEL-172 [feat] 학과 친구 -> 학교 친구 수정
  • Loading branch information
euije authored Sep 29, 2023
2 parents 5002766 + edcc042 commit 9cf5a37
Show file tree
Hide file tree
Showing 16 changed files with 143 additions and 74 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -83,19 +83,14 @@ public List<FriendShuffleResponse> findShuffledFriend(Long userId) {
public RecommendFriendResponse findAllRecommendSchoolFriends(Pageable pageable, Long userId) {
final User user = userRepository.getById(userId);

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

List<FriendResponse> pageList = PaginationFactory.getPage(recommendFriends, pageable)
.stream()
.map(FriendResponse::of)
.toList();

return RecommendFriendResponse.of(recommendFriends.size(), pageList);
return RecommendFriendResponse.of(size, recommendFriends);
}

@Transactional
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,25 @@ public interface UserJpaRepository extends JpaRepository<User, Long> {
"and u.deletedAt is null")
List<User> findAllByGroupId(@Param("groupId") Long groupId);

@Query("select count (u) from User u, UserGroup g " +
"where u.group.id = g.id " +
"and g.groupName = :groupName " +
"and u.id <> :userId " +
"and u.id not in (select f.target.id from Friend f where :userId = f.user.id and f.target.deletedAt is null) "
+
"and u.deletedAt is null")
Integer countAllByGroupNameFilteredByNotFriend(@Param("userId") Long userId, @Param("groupName") String groupName);

@Query("select u from User u, UserGroup g " +
"where u.group.id = g.id " +
"and g.groupName = :groupName " +
"and u.id <> :userId " +
"and u.id not in (select f.target.id from Friend f where :userId = f.user.id and f.target.deletedAt is null) "
+
"and u.deletedAt is null")
List<User> findAllByGroupNameFilteredByNotFriend(@Param("userId") Long userId,
@Param("groupName") String groupName, Pageable pageable);

@Query("select u from User u "
+ "where u.group.groupName = :groupName "
+ "and u.uuid not in :uuidList "
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,13 +38,16 @@ public interface UserRepository {

User getByDeviceTokenNotFiltered(String deviceToken);


Optional<User> findByDeviceToken(String deviceToken);

Optional<User> findByDeviceTokenNotFiltered(String deviceToken);

List<User> findAllByGroupId(Long groupId);

Integer countAllByGroupNameFilteredByNotFriend(Long userId, String groupName);

List<User> findAllByGroupNameFilteredByNotFriend(Long userId, String groupName, Pageable pageable);

List<User> findAllByGroupContainingName(String groupName, String keyword,
List<String> uuidList);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -119,6 +119,16 @@ public List<User> findAllByGroupId(Long groupId) {
return userJpaRepository.findAllByGroupId(groupId);
}

@Override
public Integer countAllByGroupNameFilteredByNotFriend(Long userId, String groupName) {
return userJpaRepository.countAllByGroupNameFilteredByNotFriend(userId, groupName);
}

@Override
public List<User> findAllByGroupNameFilteredByNotFriend(Long userId, String groupName, Pageable pageable) {
return userJpaRepository.findAllByGroupNameFilteredByNotFriend(userId, groupName, pageable);
}

@Override
public List<User> findAllByGroupContainingName(String groupName, String keyword,
List<String> uuidList) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,25 +36,21 @@
@DisplayNameGeneration(ReplaceUnderscores.class)
public class AuthManagerTest {

private final CooldownRepository cooldownRepository = new FakeCooldownRepository();
private final FriendRepository friendRepository = new FakeFriendRepository();
private final QuestionRepository questionRepository = new FakeQuestionRepository();
private final String secretKey = Base64.getEncoder().encodeToString(
"keyForTestkeyForTestkeyForTestkeyForTestkeyForTestkeyForTestkeyForTestkeyForTestkeyForTest".getBytes());

private final UserRepository userRepository = new FakeUserRepository();
private final FriendRepository friendRepository = new FakeFriendRepository();
private final CooldownRepository cooldownRepository = new FakeCooldownRepository();
private final TokenProvider tokenProvider = new TokenJwtProvider(secretKey);
private final TokenRepository tokenRepository = new FakeTokenRepository();
private final QuestionRepository questionRepository = new FakeQuestionRepository();
private final UserRepository userRepository = new FakeUserRepository(friendRepository);
private final VoteRepository voteRepository = new FakeVoteRepository();

private final TestDataRepositoryUtil testDataUtil = new TestDataRepositoryUtil(
userRepository,
voteRepository,
questionRepository,
friendRepository
);

private final TokenProvider tokenProvider = new TokenJwtProvider(secretKey);

private AuthManager authManager;

@BeforeEach
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -71,43 +71,38 @@
@DisplayNameGeneration(ReplaceUnderscores.class)
public class AuthServiceTest {

private final ConnectionManager connectionManager = new FakeConnectionManager();
private final CooldownRepository cooldownRepository = new FakeCooldownRepository();
private final FCMManager fcmManager = new FakeFcmManger();
private final FriendRepository friendRepository = new FakeFriendRepository();
private final MessageQueueRepository messageQueueRepository = new FakeMessageQueueRepository();
private final QuestionRepository questionRepository = new FakeQuestionRepository();
private final String secretKey = Base64.getEncoder().encodeToString(
"keyForTestkeyForTestkeyForTestkeyForTestkeyForTestkeyForTestkeyForTestkeyForTestkeyForTest".getBytes());

private final UserRepository userRepository = new FakeUserRepository();
private final UserGroupRepository userGroupRepository = new FakeUserGroupRepository();
private final FriendRepository friendRepository = new FakeFriendRepository();
private final CooldownRepository cooldownRepository = new FakeCooldownRepository();
private final TokenProvider tokenProvider = new TokenJwtProvider(secretKey);
private final TokenRepository tokenRepository = new FakeTokenRepository();
private final QuestionRepository questionRepository = new FakeQuestionRepository();
private final UserGroupRepository userGroupRepository = new FakeUserGroupRepository();
private final UserRepository userRepository = new FakeUserRepository(friendRepository);
private final UserManager userManager = new FakeUserManager(userRepository);
private final FriendManager friendManager = new FakeFriendManager(userRepository);
private final NotificationService notificationService = NotificationFcmService.builder()
.userRepository(userRepository)
.tokenRepository(tokenRepository)
.fcmManager(fcmManager)
.build();
private final AuthManager authManager = new FakeAuthManager(
friendRepository, cooldownRepository, userRepository, tokenRepository, tokenProvider
);
private final VoteRepository voteRepository = new FakeVoteRepository();
private final MessageQueueRepository messageQueueRepository = new FakeMessageQueueRepository();

private final TestDataRepositoryUtil testDataUtil = new TestDataRepositoryUtil(
userRepository,
voteRepository,
questionRepository,
friendRepository
);

private final TokenProvider tokenProvider = new TokenJwtProvider(secretKey);
private final AuthManager authManager = new FakeAuthManager(
friendRepository, cooldownRepository, userRepository, tokenRepository, tokenProvider
);
private final UserManager userManager = new FakeUserManager(userRepository);
private final VoteManager voteManager = new FakeVoteManager(
userRepository, questionRepository, voteRepository, friendRepository,
userManager);
private final FriendManager friendManager = new FakeFriendManager(userRepository);
private final ConnectionManager connectionManager = new FakeConnectionManager();
private final FCMManager fcmManager = new FakeFcmManger();

private final NotificationService notificationService = NotificationFcmService.builder()
.userRepository(userRepository)
.tokenRepository(tokenRepository)
.fcmManager(fcmManager)
.build();

private AuthService authService;

@BeforeEach
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

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

import com.yello.server.domain.friend.FakeFriendRepository;
import com.yello.server.domain.friend.repository.FriendRepository;
import com.yello.server.domain.friend.service.FriendManager;
import com.yello.server.domain.friend.service.FriendManagerImpl;
import com.yello.server.domain.group.entity.UserGroup;
Expand All @@ -22,7 +24,8 @@
@DisplayNameGeneration(ReplaceUnderscores.class)
public class FriendManagerTest {

private final UserRepository userRepository = new FakeUserRepository();
private final FriendRepository friendRepository = new FakeFriendRepository();
private final UserRepository userRepository = new FakeUserRepository(friendRepository);

private FriendManager friendManager;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,11 +43,11 @@
@DisplayNameGeneration(ReplaceUnderscores.class)
class FriendServiceTest {

private final UserRepository userRepository = new FakeUserRepository();
private final FriendRepository friendRepository = new FakeFriendRepository();
private final VoteRepository voteRepository = new FakeVoteRepository();
private final QuestionRepository questionRepository = new FakeQuestionRepository();
private final UserRepository userRepository = new FakeUserRepository(friendRepository);
private final UserManager userManager = new FakeUserManager(userRepository);
private final VoteRepository voteRepository = new FakeVoteRepository();
private final VoteManager voteManager =
new FakeVoteManager(userRepository, questionRepository, voteRepository, friendRepository,
userManager);
Expand All @@ -57,7 +57,6 @@ class FriendServiceTest {
questionRepository,
friendRepository
);

private FriendService friendService;
private User user1;
private User user2;
Expand All @@ -82,6 +81,9 @@ void init() {

testDataUtil.generateFriend(user1, user2);
testDataUtil.generateFriend(user2, user1);

testDataUtil.generateFriend(user1, user3);
testDataUtil.generateFriend(user3, user1);
}

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

// then
assertThat(friends.totalCount()).isEqualTo(1);
assertThat(friends.totalCount()).isEqualTo(2);
assertThat(friends.friends().get(0).name()).isEqualTo("name2");
}

@Test
void 친구__성공합니다() {
// given
final Long userId = 1L;
final Long targetId = 3L;
final Long targetId = 4L;

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

// then
assertThat(friend.getUser().getName()).isEqualTo("name1");
assertThat(friend.getTarget().getName()).isEqualTo("name3");
assertThat(friend.getTarget().getName()).isEqualTo("name4");
}

@Test
Expand Down Expand Up @@ -173,7 +175,7 @@ void init() {
@Test
void 친구_셔플__친구_가_부족한_경우에_FriendException_발생합니다() {
// given
final Long userId = 3L;
final Long userId = 4L;

// when
// then
Expand All @@ -197,7 +199,7 @@ void init() {
);

// then
assertThat(recommendSchoolFriends.totalCount()).isEqualTo(3);
assertThat(recommendSchoolFriends.totalCount()).isEqualTo(2);
}

@Test
Expand Down Expand Up @@ -261,7 +263,7 @@ void init() {
);

// then
assertThat(allRecommendKakaoFriends.totalCount()).isEqualTo(3);
assertThat(allRecommendKakaoFriends.totalCount()).isEqualTo(2);
}

@Test
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

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

import com.yello.server.domain.friend.FakeFriendRepository;
import com.yello.server.domain.friend.repository.FriendRepository;
import com.yello.server.domain.group.entity.UserGroup;
import com.yello.server.domain.purchase.FakeAppleApiWebClient;
import com.yello.server.domain.purchase.FakePurchaseManager;
Expand Down Expand Up @@ -34,7 +36,8 @@
@DisplayNameGeneration(ReplaceUnderscores.class)
public class PurchaseServiceTest {

private final UserRepository userRepository = new FakeUserRepository();
private final FriendRepository friendRepository = new FakeFriendRepository();
private final UserRepository userRepository = new FakeUserRepository(friendRepository);
private final PurchaseRepository purchaseRepository = new FakePurchaseRepository();
private final TokenFactory tokenFactory = new FakeTokenFactory();
private final ApiWebClient apiWebClient = new FakeAppleApiWebClient(tokenFactory);
Expand Down
42 changes: 42 additions & 0 deletions src/test/java/com/yello/server/domain/user/FakeUserRepository.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import static com.yello.server.global.common.ErrorCode.USERID_NOT_FOUND_USER_EXCEPTION;
import static com.yello.server.global.common.ErrorCode.YELLOID_NOT_FOUND_USER_EXCEPTION;

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

private FriendRepository friendRepository;

public FakeUserRepository(FriendRepository friendRepository) {
this.friendRepository = friendRepository;
}

@Override
public User save(User user) {
if (user.getId() != null && user.getId() > id) {
Expand Down Expand Up @@ -176,6 +183,41 @@ public List<User> findAllByGroupId(Long groupId) {
.toList();
}

@Override
public Integer countAllByGroupNameFilteredByNotFriend(Long userId, String groupName) {
return data.stream()
.filter(user -> !user.getId().equals(userId))
.filter(user -> user.getGroup().getGroupName().equals(groupName))
.filter(user ->
!friendRepository.findAllByUserId(userId).stream()
.filter(friend -> friend.getTarget().getDeletedAt() == null)
.map(friend -> friend.getTarget().getId())
.toList()
.contains(user.getId())
)
.filter(user -> user.getDeletedAt() == null)
.toList()
.size();
}

@Override
public List<User> findAllByGroupNameFilteredByNotFriend(Long userId, String groupName, Pageable pageable) {
return data.stream()
.filter(user -> !user.getId().equals(userId))
.filter(user -> user.getGroup().getGroupName().equals(groupName))
.filter(user ->
!friendRepository.findAllByUserId(userId).stream()
.filter(friend -> friend.getTarget().getDeletedAt() != null)
.map(friend -> friend.getTarget().getId())
.toList()
.contains(user.getId())
)
.filter(user -> user.getDeletedAt() != null)
.skip(pageable.getOffset())
.limit(pageable.getPageSize())
.toList();
}

@Override
public List<User> findAllByGroupContainingName(String groupName, String keyword,
List<String> uuidList) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

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

import com.yello.server.domain.friend.FakeFriendRepository;
import com.yello.server.domain.friend.repository.FriendRepository;
import com.yello.server.domain.group.entity.UserGroup;
import com.yello.server.domain.user.FakeUserRepository;
import com.yello.server.domain.user.entity.Gender;
Expand All @@ -24,7 +26,8 @@ public class UserManagerTest {
private final static String OFFICIAL_MALE_ID = "yello_male";
private final static String OFFICIAL_FEMALE_ID = "yello_female";

private final UserRepository userRepository = new FakeUserRepository();
private final FriendRepository friendRepository = new FakeFriendRepository();
private final UserRepository userRepository = new FakeUserRepository(friendRepository);

private UserManager userManager;

Expand Down
Loading

0 comments on commit 9cf5a37

Please sign in to comment.