From 5daa48b5d76a03f8612f366454c0b2a4a013b1fb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9D=B4=EC=84=9D=EB=B2=94?= Date: Fri, 22 Aug 2025 23:25:53 +0900 Subject: [PATCH 1/5] =?UTF-8?q?Chore:=20querydsl=20ignore=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.gitignore b/.gitignore index c2065bc2..429e9717 100644 --- a/.gitignore +++ b/.gitignore @@ -5,6 +5,9 @@ build/ !**/src/main/**/build/ !**/src/test/**/build/ +### QueryDSL ### +/src/main/generated/ + ### STS ### .apt_generated .classpath From d8f39eba1bb6d09cc2e704332cbf9afb7c6691e1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9D=B4=EC=84=9D=EB=B2=94?= Date: Fri, 22 Aug 2025 23:31:49 +0900 Subject: [PATCH 2/5] =?UTF-8?q?Feat:=20=EC=BF=BC=EB=A6=ACdsl=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle | 23 ++++++++++++ .../GroupMemberRepositoryCustom.java | 9 +++++ .../repository/GroupMemberRepositoryImpl.java | 36 +++++++++++++++++++ .../flipnote/infra/config/QuerydslConfig.java | 20 +++++++++++ 4 files changed, 88 insertions(+) create mode 100644 src/main/java/project/flipnote/group/repository/GroupMemberRepositoryCustom.java create mode 100644 src/main/java/project/flipnote/group/repository/GroupMemberRepositoryImpl.java create mode 100644 src/main/java/project/flipnote/infra/config/QuerydslConfig.java diff --git a/build.gradle b/build.gradle index b387035f..39f95277 100644 --- a/build.gradle +++ b/build.gradle @@ -51,6 +51,29 @@ dependencies { testRuntimeOnly 'com.h2database:h2' implementation platform('software.amazon.awssdk:bom:2.20.56') implementation 'software.amazon.awssdk:s3' + + implementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta' + annotationProcessor "com.querydsl:querydsl-apt:5.0.0:jakarta" + annotationProcessor "jakarta.annotation:jakarta.annotation-api" + annotationProcessor "jakarta.persistence:jakarta.persistence-api" +} + +def querydslDir = layout.buildDirectory.dir("generated/querydsl").get().asFile + +tasks.withType(JavaCompile).configureEach { + options.generatedSourceOutputDirectory.set(querydslDir) +} + +sourceSets { + main { + java { + srcDir querydslDir + } + } +} + +clean.doLast { + file(querydslDir).deleteDir() } tasks.named('test') { diff --git a/src/main/java/project/flipnote/group/repository/GroupMemberRepositoryCustom.java b/src/main/java/project/flipnote/group/repository/GroupMemberRepositoryCustom.java new file mode 100644 index 00000000..10c0151e --- /dev/null +++ b/src/main/java/project/flipnote/group/repository/GroupMemberRepositoryCustom.java @@ -0,0 +1,9 @@ +package project.flipnote.group.repository; + +import java.util.List; + +import project.flipnote.group.model.GroupMemberInfo; + +public interface GroupMemberRepositoryCustom { + List findGroupMembers(Long groupId); +} diff --git a/src/main/java/project/flipnote/group/repository/GroupMemberRepositoryImpl.java b/src/main/java/project/flipnote/group/repository/GroupMemberRepositoryImpl.java new file mode 100644 index 00000000..97e82e1f --- /dev/null +++ b/src/main/java/project/flipnote/group/repository/GroupMemberRepositoryImpl.java @@ -0,0 +1,36 @@ +package project.flipnote.group.repository; + +import java.util.List; + +import com.querydsl.core.types.Projections; +import com.querydsl.jpa.impl.JPAQuery; +import com.querydsl.jpa.impl.JPAQueryFactory; + +import lombok.RequiredArgsConstructor; +import project.flipnote.group.entity.QGroupMember; +import project.flipnote.group.model.GroupMemberInfo; +import project.flipnote.user.entity.QUserProfile; + +@RequiredArgsConstructor +public class GroupMemberRepositoryImpl{ + + private final JPAQueryFactory queryFactory; + + QUserProfile userProfile = QUserProfile.userProfile; + QGroupMember groupMember = QGroupMember.groupMember; + + public List findGroupMembers(Long groupId) { + return queryFactory.select(Projections.constructor( + GroupMemberInfo.class, + userProfile.id, + groupMember.role, + userProfile.name, + userProfile.profileImageUrl + )) + .from(groupMember) + .join(groupMember.user, userProfile) + .where(groupMember.group.id.eq(groupId)) + .fetch(); + } + +} diff --git a/src/main/java/project/flipnote/infra/config/QuerydslConfig.java b/src/main/java/project/flipnote/infra/config/QuerydslConfig.java new file mode 100644 index 00000000..075576d0 --- /dev/null +++ b/src/main/java/project/flipnote/infra/config/QuerydslConfig.java @@ -0,0 +1,20 @@ +package project.flipnote.infra.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import com.querydsl.jpa.impl.JPAQueryFactory; + +import jakarta.persistence.EntityManager; +import lombok.RequiredArgsConstructor; + +@Configuration +@RequiredArgsConstructor +public class QuerydslConfig { + private final EntityManager entityManager; + + @Bean + public JPAQueryFactory jpaQueryFactory() { + return new JPAQueryFactory(entityManager); + } +} From a1e12b7e48b658950aec8a94a8af8b92c5780aee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9D=B4=EC=84=9D=EB=B2=94?= Date: Fri, 22 Aug 2025 23:32:06 +0900 Subject: [PATCH 3/5] =?UTF-8?q?Feat:=20=EC=9C=A0=EC=A0=80=20=EC=A1=B0?= =?UTF-8?q?=ED=9A=8C=20API=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../group/controller/GroupController.java | 12 ++++++ .../group/model/FindGroupMemberResponse.java | 11 +++++ .../flipnote/group/model/GroupMemberInfo.java | 14 ++++++ .../repository/GroupMemberRepository.java | 5 ++- .../flipnote/group/service/GroupService.java | 41 ++++++++++++++++-- .../group/service/GroupServiceTest.java | 43 +++++++++++++++++++ 6 files changed, 122 insertions(+), 4 deletions(-) create mode 100644 src/main/java/project/flipnote/group/model/FindGroupMemberResponse.java create mode 100644 src/main/java/project/flipnote/group/model/GroupMemberInfo.java diff --git a/src/main/java/project/flipnote/group/controller/GroupController.java b/src/main/java/project/flipnote/group/controller/GroupController.java index e706783c..0d781d43 100644 --- a/src/main/java/project/flipnote/group/controller/GroupController.java +++ b/src/main/java/project/flipnote/group/controller/GroupController.java @@ -14,6 +14,8 @@ import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; import project.flipnote.common.security.dto.AuthPrinciple; +import project.flipnote.group.model.FindGroupMemberResponse; +import project.flipnote.group.model.FindGroupMemberResponse; import project.flipnote.group.model.GroupCreateRequest; import project.flipnote.group.model.GroupCreateResponse; import project.flipnote.group.model.GroupDetailResponse; @@ -54,4 +56,14 @@ public ResponseEntity deleteGroup( return ResponseEntity.noContent().build(); } + + //그룹내 멤버 조회 + @GetMapping("/{groupId}/members") + public ResponseEntity findGroupMembers( + @AuthenticationPrincipal AuthPrinciple authPrinciple, + @PathVariable("groupId") Long groupId) { + FindGroupMemberResponse res = groupService.findGroupMembers(authPrinciple, groupId); + + return ResponseEntity.ok(res); + } } diff --git a/src/main/java/project/flipnote/group/model/FindGroupMemberResponse.java b/src/main/java/project/flipnote/group/model/FindGroupMemberResponse.java new file mode 100644 index 00000000..622d4c78 --- /dev/null +++ b/src/main/java/project/flipnote/group/model/FindGroupMemberResponse.java @@ -0,0 +1,11 @@ +package project.flipnote.group.model; + +import java.util.List; + +public record FindGroupMemberResponse( + List groupMembers +) { + public static FindGroupMemberResponse from(List groupMembers) { + return new FindGroupMemberResponse(groupMembers); + } +} diff --git a/src/main/java/project/flipnote/group/model/GroupMemberInfo.java b/src/main/java/project/flipnote/group/model/GroupMemberInfo.java new file mode 100644 index 00000000..ff14edc7 --- /dev/null +++ b/src/main/java/project/flipnote/group/model/GroupMemberInfo.java @@ -0,0 +1,14 @@ +package project.flipnote.group.model; + +import project.flipnote.group.entity.GroupMemberRole; + +public record GroupMemberInfo( + Long id, + GroupMemberRole role, + String name, + String profile +) { + public static GroupMemberInfo from(Long id, GroupMemberRole role, String name, String profile) { + return new GroupMemberInfo(id, role, name, profile); + } +} diff --git a/src/main/java/project/flipnote/group/repository/GroupMemberRepository.java b/src/main/java/project/flipnote/group/repository/GroupMemberRepository.java index b0db41f4..666d4bbf 100644 --- a/src/main/java/project/flipnote/group/repository/GroupMemberRepository.java +++ b/src/main/java/project/flipnote/group/repository/GroupMemberRepository.java @@ -12,7 +12,7 @@ import project.flipnote.user.entity.UserProfile; @Repository -public interface GroupMemberRepository extends JpaRepository { +public interface GroupMemberRepository extends JpaRepository, GroupMemberRepositoryCustom { Optional findByGroupAndUser(Group group, UserProfile userProfile); long countByGroup_Id(Long groupId); @@ -24,4 +24,7 @@ public interface GroupMemberRepository extends JpaRepository long countByGroup_idAndUser_idNot(Long groupId, Long userId); List findByGroupAndRoleIn(Group group, List roles); + + List findAllByGroup_Id(Long groupId); + } diff --git a/src/main/java/project/flipnote/group/service/GroupService.java b/src/main/java/project/flipnote/group/service/GroupService.java index d3297902..296752fb 100644 --- a/src/main/java/project/flipnote/group/service/GroupService.java +++ b/src/main/java/project/flipnote/group/service/GroupService.java @@ -17,9 +17,11 @@ import project.flipnote.group.entity.GroupPermissionStatus; import project.flipnote.group.entity.GroupRolePermission; import project.flipnote.group.exception.GroupErrorCode; +import project.flipnote.group.model.FindGroupMemberResponse; import project.flipnote.group.model.GroupCreateRequest; import project.flipnote.group.model.GroupCreateResponse; import project.flipnote.group.model.GroupDetailResponse; +import project.flipnote.group.model.GroupMemberInfo; import project.flipnote.group.repository.GroupMemberRepository; import project.flipnote.group.repository.GroupPermissionRepository; import project.flipnote.group.repository.GroupRepository; @@ -50,16 +52,25 @@ public UserProfile validateUser(AuthPrinciple authPrinciple) { () -> new BizException(UserErrorCode.USER_NOT_FOUND) ); } + + /* + 그룹 내 유저 검증 + */ + public void validateGroupInUser(UserProfile user, Long groupId) { + groupMemberRepository.findByGroup_IdAndUser_Id(groupId, user.getId()).orElseThrow( + () -> new BizException(GroupJoinErrorCode.USER_NOT_IN_GROUP) + ); + } /* 그룹 내 유저 조회 */ - public GroupMember validateGroupInUser(UserProfile user, Long groupId) { + public GroupMember getGroupMember(UserProfile user, Long groupId) { return groupMemberRepository.findByGroup_IdAndUser_Id(groupId, user.getId()).orElseThrow( () -> new BizException(GroupJoinErrorCode.USER_NOT_IN_GROUP) ); } - + /* 그룹 조회 */ @@ -174,6 +185,14 @@ private boolean checkUserNotExistInGroup(UserProfile user, Long groupId) { } return true; } + + /* + 그룹 내 모든 멤버리스트 조회 + */ + private List findGroupMembers(Long groupId) { + //각 그룹멤버의 id를 가지고 유저를 찾고 유저명, 권한, 등등 가져오기 + return groupMemberRepository.findGroupMembers(groupId); + } /* 그룹 상세 정보 조회 @@ -202,7 +221,7 @@ public void deleteGroup(AuthPrinciple authPrinciple, Long groupId) { UserProfile user = validateUser(authPrinciple); //3. 그룹 내 유저 조회 - GroupMember groupMember = validateGroupInUser(user, groupId); + GroupMember groupMember = getGroupMember(user, groupId); //4. 유저 권환 조회 if (!groupMember.getRole().equals(GroupMemberRole.OWNER)) { @@ -222,4 +241,20 @@ public String findGroupName(Long groupId) { return groupRepository.findGroupNameById(groupId) .orElseThrow(() -> new BizException(GroupErrorCode.GROUP_NOT_FOUND)); } + + public FindGroupMemberResponse findGroupMembers(AuthPrinciple authPrinciple, Long groupId) { + //1. 그룹 조회 + Group group = validateGroup(groupId); + + //2. 유저 조회 + UserProfile user = validateUser(authPrinciple); + + //3. 그룹 내 유저 조회 + validateGroupInUser(user, groupId); + + //4. 그룹 내 모든 유저 조회 + List groupMembers = findGroupMembers(groupId); + + return FindGroupMemberResponse.from(groupMembers); + } } diff --git a/src/test/java/project/flipnote/group/service/GroupServiceTest.java b/src/test/java/project/flipnote/group/service/GroupServiceTest.java index a59116f6..b45f600d 100644 --- a/src/test/java/project/flipnote/group/service/GroupServiceTest.java +++ b/src/test/java/project/flipnote/group/service/GroupServiceTest.java @@ -30,10 +30,13 @@ import project.flipnote.group.entity.GroupPermission; import project.flipnote.group.entity.GroupPermissionStatus; import project.flipnote.group.exception.GroupErrorCode; +import project.flipnote.group.model.FindGroupMemberResponse; import project.flipnote.group.model.GroupCreateRequest; import project.flipnote.group.model.GroupCreateResponse; import project.flipnote.group.model.GroupDetailResponse; +import project.flipnote.group.model.GroupMemberInfo; import project.flipnote.group.repository.GroupMemberRepository; +import project.flipnote.group.repository.GroupMemberRepositoryImpl; import project.flipnote.group.repository.GroupPermissionRepository; import project.flipnote.group.repository.GroupRepository; import project.flipnote.group.repository.GroupRolePermissionRepository; @@ -67,6 +70,9 @@ class GroupServiceTest { @Mock GroupMemberRepository groupMemberRepository; + @Mock + GroupMemberRepositoryImpl groupMemberRepositoryImpl; + UserProfile userProfile; AuthPrinciple authPrinciple; @@ -288,6 +294,7 @@ void before() { .maxMember(100) .imageUrl("www.~~~") .build(); + ReflectionTestUtils.setField(group, "id", 1L); GroupMember groupMember = GroupMember.builder() .group(group) @@ -306,4 +313,40 @@ void before() { assertEquals(GroupErrorCode.OTHER_USER_EXIST_IN_GROUP, exception.getErrorCode()); } + + @Test + public void 그룹_멤버조회_성공() throws Exception { + //given + Group group = Group.builder() + .name("그룹1") + .category(Category.IT) + .description("설명1") + .publicVisible(true) + .applicationRequired(true) + .maxMember(100) + .imageUrl("www.~~~") + .build(); + ReflectionTestUtils.setField(group, "id", 1L); + + GroupMember groupMember = GroupMember.builder() + .group(group) + .role(GroupMemberRole.OWNER) + .user(userProfile) + .build(); + ReflectionTestUtils.setField(groupMember, "id", 1L); + + List groupMembers = List.of(GroupMemberInfo.from(userProfile.getId(), groupMember.getRole(), userProfile.getName(), userProfile.getProfileImageUrl())); + + given(groupRepository.findByIdAndDeletedAtIsNull(group.getId())).willReturn(Optional.of(group)); + given(userProfileRepository.findByIdAndStatus(userProfile.getId(), UserStatus.ACTIVE)).willReturn(Optional.of(userProfile)); + given(groupMemberRepository.findByGroup_IdAndUser_Id(group.getId(),userProfile.getId())).willReturn(Optional.of(groupMember)); + given(groupMemberRepository.findGroupMembers(group.getId())).willReturn(groupMembers); + //when + FindGroupMemberResponse res = groupService.findGroupMembers(authPrinciple, group.getId()); + //then + assertEquals(1, res.groupMembers().size()); + assertEquals(userProfile.getId(), res.groupMembers().get(0).id()); + then(groupRepository).should().findByIdAndDeletedAtIsNull(group.getId()); + then(groupMemberRepository).should().findGroupMembers(group.getId()); + } } From dd24b485f4a8152330af2d4b55e5ef26092fa11b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9D=B4=EC=84=9D=EB=B2=94?= Date: Sat, 23 Aug 2025 21:53:16 +0900 Subject: [PATCH 4/5] =?UTF-8?q?Fix:=20implements=20=EB=88=84=EB=9D=BD=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../flipnote/group/repository/GroupMemberRepositoryImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/project/flipnote/group/repository/GroupMemberRepositoryImpl.java b/src/main/java/project/flipnote/group/repository/GroupMemberRepositoryImpl.java index 97e82e1f..d45348c8 100644 --- a/src/main/java/project/flipnote/group/repository/GroupMemberRepositoryImpl.java +++ b/src/main/java/project/flipnote/group/repository/GroupMemberRepositoryImpl.java @@ -12,7 +12,7 @@ import project.flipnote.user.entity.QUserProfile; @RequiredArgsConstructor -public class GroupMemberRepositoryImpl{ +public class GroupMemberRepositoryImpl implements GroupMemberRepositoryCustom { private final JPAQueryFactory queryFactory; From 34876aa6b6be2010a01c7cd18a8c9da036180b5e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9D=B4=EC=84=9D=EB=B2=94?= Date: Sat, 23 Aug 2025 22:18:02 +0900 Subject: [PATCH 5/5] =?UTF-8?q?Refactor:=20=EA=B2=80=EC=A6=9D=EA=B3=BC=20?= =?UTF-8?q?=EA=B0=9D=EC=B2=B4=20=EA=B0=80=EC=A0=B8=EC=98=A4=EB=8A=94=20?= =?UTF-8?q?=EB=A9=94=EC=84=9C=EB=93=9C=20=EB=AA=85=ED=99=95=ED=95=98?= =?UTF-8?q?=EA=B2=8C=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../repository/GroupMemberRepository.java | 3 +- .../group/repository/GroupRepository.java | 2 ++ .../flipnote/group/service/GroupService.java | 31 +++++++++++++------ .../group/service/GroupServiceTest.java | 26 +++++++++------- 4 files changed, 38 insertions(+), 24 deletions(-) diff --git a/src/main/java/project/flipnote/group/repository/GroupMemberRepository.java b/src/main/java/project/flipnote/group/repository/GroupMemberRepository.java index 666d4bbf..5473238b 100644 --- a/src/main/java/project/flipnote/group/repository/GroupMemberRepository.java +++ b/src/main/java/project/flipnote/group/repository/GroupMemberRepository.java @@ -25,6 +25,5 @@ public interface GroupMemberRepository extends JpaRepository, List findByGroupAndRoleIn(Group group, List roles); - List findAllByGroup_Id(Long groupId); - + boolean existsByGroup_IdAndUser_Id(Long groupId, Long id); } diff --git a/src/main/java/project/flipnote/group/repository/GroupRepository.java b/src/main/java/project/flipnote/group/repository/GroupRepository.java index dc317cce..2ee8c2f4 100644 --- a/src/main/java/project/flipnote/group/repository/GroupRepository.java +++ b/src/main/java/project/flipnote/group/repository/GroupRepository.java @@ -22,4 +22,6 @@ public interface GroupRepository extends JpaRepository { @Query("SELECT g.name FROM Group g WHERE g.id = :id") Optional findGroupNameById(@Param("id") Long id); + + boolean existsByIdAndDeletedAtIsNull(Long groupId); } diff --git a/src/main/java/project/flipnote/group/service/GroupService.java b/src/main/java/project/flipnote/group/service/GroupService.java index a8de3f6e..d964890e 100644 --- a/src/main/java/project/flipnote/group/service/GroupService.java +++ b/src/main/java/project/flipnote/group/service/GroupService.java @@ -61,9 +61,9 @@ public UserProfile validateUser(AuthPrinciple authPrinciple) { 그룹 내 유저 검증 */ public void validateGroupInUser(UserProfile user, Long groupId) { - groupMemberRepository.findByGroup_IdAndUser_Id(groupId, user.getId()).orElseThrow( - () -> new BizException(GroupJoinErrorCode.USER_NOT_IN_GROUP) - ); + if(!groupMemberRepository.existsByGroup_IdAndUser_Id(groupId, user.getId())) { + throw new BizException(GroupJoinErrorCode.USER_NOT_IN_GROUP); + } } /* @@ -75,10 +75,19 @@ public GroupMember getGroupMember(UserProfile user, Long groupId) { ); } + /* + 그룹 검증 + */ + public void validateGroup(Long groupId) { + if(!groupRepository.existsByIdAndDeletedAtIsNull(groupId)) { + throw new BizException(GroupErrorCode.GROUP_NOT_FOUND); + } + } + /* 그룹 조회 */ - public Group validateGroup(Long groupId) { + public Group getGroup(Long groupId) { return groupRepository.findByIdAndDeletedAtIsNull(groupId).orElseThrow( () -> new BizException(GroupErrorCode.GROUP_NOT_FOUND) ); @@ -196,8 +205,8 @@ public GroupPutResponse changeGroup(AuthPrinciple authPrinciple, GroupPutRequest //2. 인원수 검증 validateMaxMember(req.maxMember()); - //3. 그룹 가져오기 - Group group = validateGroup(groupId); + //3. 그룹 조회 + validateGroup(groupId); //4. 그룹 내 유저 조회 GroupMember groupMember = getGroupMember(user, groupId); @@ -237,7 +246,7 @@ private List findGroupMembers(Long groupId) { public GroupDetailResponse findGroupDetail(AuthPrinciple authPrinciple, Long groupId) { //1. 그룹 조회 - Group group = validateGroup(groupId); + Group group = getGroup(groupId); //2. 유저 조회 UserProfile user = validateUser(authPrinciple); @@ -252,7 +261,7 @@ public GroupDetailResponse findGroupDetail(AuthPrinciple authPrinciple, Long gro @Transactional public void deleteGroup(AuthPrinciple authPrinciple, Long groupId) { //1. 그룹 조회 - Group group = validateGroup(groupId); + Group group = getGroup(groupId); //2. 유저 조회 UserProfile user = validateUser(authPrinciple); @@ -274,14 +283,16 @@ public void deleteGroup(AuthPrinciple authPrinciple, Long groupId) { } + //그룹이름 찾는 메서드 public String findGroupName(Long groupId) { return groupRepository.findGroupNameById(groupId) .orElseThrow(() -> new BizException(GroupErrorCode.GROUP_NOT_FOUND)); } + //그룹 내 멤버 조회 메서드 public FindGroupMemberResponse findGroupMembers(AuthPrinciple authPrinciple, Long groupId) { - //1. 그룹 조회 - Group group = validateGroup(groupId); + //1. 그룹 검증 + validateGroup(groupId); //2. 유저 조회 UserProfile user = validateUser(authPrinciple); diff --git a/src/test/java/project/flipnote/group/service/GroupServiceTest.java b/src/test/java/project/flipnote/group/service/GroupServiceTest.java index ae962551..65f737f7 100644 --- a/src/test/java/project/flipnote/group/service/GroupServiceTest.java +++ b/src/test/java/project/flipnote/group/service/GroupServiceTest.java @@ -160,6 +160,7 @@ void before() { .maxMember(100) .imageUrl("www.~~~") .build(); + ReflectionTestUtils.setField(group, "id", 1L); GroupMember groupMember = GroupMember.builder() .group(group) @@ -167,8 +168,8 @@ void before() { .role(GroupMemberRole.MEMBER) .build(); - given(groupRepository.findByIdAndDeletedAtIsNull(any())).willReturn(Optional.of(group)); - given(groupMemberRepository.findByGroup_IdAndUser_Id(any(), any())).willReturn(Optional.of(groupMember)); + given(groupRepository.findByIdAndDeletedAtIsNull(group.getId())).willReturn(Optional.of(group)); + given(groupMemberRepository.existsByGroup_IdAndUser_Id(any(), any())).willReturn(true); // 사용자 검증 로직 given(userProfileRepository.findByIdAndStatus(userProfile.getId(), UserStatus.ACTIVE)) .willReturn(Optional.of(userProfile)); @@ -192,10 +193,11 @@ void before() { .maxMember(100) .imageUrl("www.~~~") .build(); + ReflectionTestUtils.setField(group, "id", 1L); - given(groupRepository.findByIdAndDeletedAtIsNull(any())).willReturn(Optional.ofNullable(group)); + given(groupRepository.findByIdAndDeletedAtIsNull(group.getId())).willReturn(Optional.of(group)); given(userProfileRepository.findByIdAndStatus(userProfile.getId(), UserStatus.ACTIVE)).willReturn(Optional.ofNullable(userProfile)); - given(groupMemberRepository.findByGroup_IdAndUser_Id(any(), any())).willReturn(Optional.empty()); + given(groupMemberRepository.existsByGroup_IdAndUser_Id(any(), any())).willReturn(false); //when BizException exception = @@ -344,16 +346,16 @@ void before() { List groupMembers = List.of(GroupMemberInfo.from(userProfile.getId(), groupMember.getRole(), userProfile.getName(), userProfile.getProfileImageUrl())); - given(groupRepository.findByIdAndDeletedAtIsNull(group.getId())).willReturn(Optional.of(group)); + given(groupRepository.existsByIdAndDeletedAtIsNull(group.getId())).willReturn(true); given(userProfileRepository.findByIdAndStatus(userProfile.getId(), UserStatus.ACTIVE)).willReturn(Optional.of(userProfile)); - given(groupMemberRepository.findByGroup_IdAndUser_Id(group.getId(),userProfile.getId())).willReturn(Optional.of(groupMember)); + given(groupMemberRepository.existsByGroup_IdAndUser_Id(group.getId(),userProfile.getId())).willReturn(true); given(groupMemberRepository.findGroupMembers(group.getId())).willReturn(groupMembers); //when FindGroupMemberResponse res = groupService.findGroupMembers(authPrinciple, group.getId()); //then assertEquals(1, res.groupMembers().size()); assertEquals(userProfile.getId(), res.groupMembers().get(0).id()); - then(groupRepository).should().findByIdAndDeletedAtIsNull(group.getId()); + then(groupRepository).should().existsByIdAndDeletedAtIsNull(group.getId()); then(groupMemberRepository).should().findGroupMembers(group.getId()); } @@ -380,7 +382,7 @@ void before() { GroupPutRequest req = new GroupPutRequest("그룹1", Category.ENGLISH, "설명1", true, true, 100, "www.~~"); - given(groupRepository.findByIdAndDeletedAtIsNull(group.getId())).willReturn(Optional.of(group)); + given(groupRepository.existsByIdAndDeletedAtIsNull(any())).willReturn(true); given(userProfileRepository.findByIdAndStatus(userProfile.getId(), UserStatus.ACTIVE)).willReturn(Optional.of(userProfile)); given(groupMemberRepository.findByGroup_IdAndUser_Id(group.getId(),userProfile.getId())).willReturn(Optional.of(groupMember)); @@ -396,8 +398,8 @@ void before() { GroupPutResponse res = groupService.changeGroup(authPrinciple, req, group.getId()); //then - assertEquals(req.name(), group.getName()); - assertEquals(req.category(), group.getCategory()); + assertEquals(req.name(), res.name()); + assertEquals(req.category(), res.category()); } @Test @@ -423,7 +425,7 @@ void before() { GroupPutRequest req = new GroupPutRequest("그룹1", Category.ENGLISH, "설명1", true, true, 100, "www.~~"); - given(groupRepository.findByIdAndDeletedAtIsNull(group.getId())).willReturn(Optional.of(group)); + given(groupRepository.existsByIdAndDeletedAtIsNull(any())).willReturn(true); given(userProfileRepository.findByIdAndStatus(userProfile.getId(), UserStatus.ACTIVE)).willReturn(Optional.of(userProfile)); given(groupMemberRepository.findByGroup_IdAndUser_Id(group.getId(),userProfile.getId())).willReturn(Optional.of(groupMember)); //when @@ -457,7 +459,7 @@ void before() { GroupPutRequest req = new GroupPutRequest("그룹1", Category.ENGLISH, "설명1", true, true, 50, "www.~~"); - given(groupRepository.findByIdAndDeletedAtIsNull(group.getId())).willReturn(Optional.of(group)); + given(groupRepository.existsByIdAndDeletedAtIsNull(any())).willReturn(true); given(userProfileRepository.findByIdAndStatus(userProfile.getId(), UserStatus.ACTIVE)).willReturn(Optional.of(userProfile)); given(groupMemberRepository.findByGroup_IdAndUser_Id(group.getId(),userProfile.getId())).willReturn(Optional.of(groupMember));