Skip to content

Commit

Permalink
Merge pull request #111 from Princess-in-silvertown/fix/110
Browse files Browse the repository at this point in the history
๐Ÿ› fix: ๊ทธ๋ฃน ์‚ญ์ œ๊ฐ€ ์ œ๋Œ€๋กœ ์ด๋ฃจ์–ด์ง€์ง€ ์•Š๋˜ ๋ฌธ์ œ ํ•ด๊ฒฐ
  • Loading branch information
woosung1223 authored Oct 3, 2024
2 parents 99cf7c0 + d7bb5bf commit 437546a
Show file tree
Hide file tree
Showing 2 changed files with 75 additions and 27 deletions.
65 changes: 38 additions & 27 deletions src/main/java/slvtwn/khu/toyouserver/application/UserService.java
Original file line number Diff line number Diff line change
Expand Up @@ -87,17 +87,46 @@ public void updateUser(Long userId, UserUpdateRequest request) {
}

private void changeUserGroupsIfChanged(UserUpdateRequest request, User user) {
List<Group> requestGroups = findGroupsFromRequest(request);
List<Group> userGroups = findGroupsFromUser(user);
List<Group> removedGroups = findRemoveGroups(user, request);
List<Group> newGroups = findNewGroups(user, request);

if (isGroupUpdatedNeeded(requestGroups, userGroups)) {
List<Group> removedGroups = findRemoveGroups(requestGroups, userGroups);
List<Group> newGroups = findNewGroups(requestGroups, userGroups);
if (!newGroups.isEmpty() || !removedGroups.isEmpty()) {
deleteRollingPaperAndMembers(user, removedGroups);
saveMembersWithNewGroups(user, newGroups);
}
}

private List<Group> findRemoveGroups(User user, UserUpdateRequest request) {
List<Group> requestGroups = findRequestGroups(request);
List<Group> userGroups = findUserGroups(user);

return userGroups.stream()
.filter(each -> !requestGroups.contains(each))
.toList();
}

private List<Group> findNewGroups(User user, UserUpdateRequest request) {
List<Group> requestGroups = findRequestGroups(request);
List<Group> userGroups = findUserGroups(user); // TODO: ์ค‘๋ณต ์ œ๊ฑฐ

return requestGroups.stream()
.filter(each -> !userGroups.contains(each))
.toList();
}

private List<Group> findRequestGroups(UserUpdateRequest request) {
return request.groups().stream()
.map(each -> groupRepository.findById(each.id())
.orElseThrow(() -> new ToyouException(ResponseType.BAD_REQUEST)))
.toList();
}

private List<Group> findUserGroups(User user) {
return memberRepository.findByUser(user).stream()
.map(Member::getGroup)
.toList();
}

private void deleteRollingPaperAndMembers(User user, List<Group> removedGroups) {
List<Member> members = memberRepository.findByUser(user);
List<RollingPaper> rollingPapers = rollingPaperRepository.findAllByMemberIn(members);
Expand All @@ -107,14 +136,6 @@ private void deleteRollingPaperAndMembers(User user, List<Group> removedGroups)
memberRepository.deleteByUserAndGroupIn(user, removedGroups);
}

private List<Group> findGroupsFromRequest(UserUpdateRequest request) {
List<Long> groupIds = request.groups().stream()
.map(GroupRequest::id)
.collect(Collectors.toList());

return groupRepository.findAllByIdIn(groupIds);
}

private List<Group> findGroupsFromUser(User user) {
return memberRepository.findByUser(user).stream()
.map(Member::getGroup)
Expand All @@ -125,20 +146,10 @@ private boolean isGroupUpdatedNeeded(List<Group> requestGroups, List<Group> user
if (requestGroups.size() > userGroups.size()) {
return true;
}
userGroups.removeAll(requestGroups);
return !userGroups.isEmpty();
}

private List<Group> findRemoveGroups(List<Group> requestGroups, List<Group> userGroups) {
return userGroups.stream()
.filter(each -> !requestGroups.contains(each))
.toList();
}

private List<Group> findNewGroups(List<Group> requestGroups, List<Group> userGroups) {
return requestGroups.stream()
.filter(each -> !userGroups.contains(each))
.toList();
return !userGroups.stream()
.filter(requestGroups::contains)
.toList()
.isEmpty();
}

private void saveMembersWithNewGroups(User user, List<Group> groups) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,43 @@ class UserServiceTest {
.containsExactly(UserResponse.of(user2, group2.getId()));
}

@Test
void ์œ ์ €_์ •๋ณด๋ฅผ_์—…๋ฐ์ดํŠธ_ํ• _์ˆ˜_์žˆ๋‹ค() {
// given
User user = new User("name", LocalDate.now(), "introduction", "profile_picture", null);
Group group = new Group("name");
Member member = new Member(user, group);

entityManager.persist(user);
entityManager.persist(group);
entityManager.persist(member);

UserUpdateRequest request = new UserUpdateRequest(user.getId(), LocalDate.now().plusDays(1),
"new_name", "new_introduction", "new_image_url", List.of(
new GroupRequest(group.getId(), group.getName())));

// when
userService.updateUser(user.getId(), request);

// then
User expectedUser = new User(request.name(), request.birthday(), request.introduction(), request.imageUrl(), null);
List<Member> userRelatedMembers = entityManager.createQuery("select m from Member m where user = :user")
.setParameter("user", user)
.getResultList();

SoftAssertions.assertSoftly(softly -> {
softly.assertThat(user)
.usingRecursiveComparison()
.ignoringFields("id", "createdDate", "lastModifiedDate")
.isEqualTo(expectedUser);

softly.assertThat(userRelatedMembers)
.extracting(Member::getGroup)
.containsExactlyInAnyOrder(group)
.hasSize(1);
});
}

@Test
void ์œ ์ €_์ •๋ณด_์—…๋ฐ์ดํŠธ_์‹œ_์ƒˆ๋กœ_๊ทธ๋ฃน์„_์ถ”๊ฐ€ํ• _์ˆ˜_์žˆ๋‹ค() {
// given
Expand Down

0 comments on commit 437546a

Please sign in to comment.