From e80acf757034a8e91c5d8942843a48a5d95c1f68 Mon Sep 17 00:00:00 2001 From: s-hwan Date: Sun, 2 Nov 2025 22:21:22 +0900 Subject: [PATCH] =?UTF-8?q?refactor=20:=20=EA=B7=B8=EB=A3=B9=20=EA=B0=80?= =?UTF-8?q?=EC=9E=85=20=EC=9A=94=EC=B2=AD=20=EB=AA=A9=EB=A1=9D=20=EC=A1=B0?= =?UTF-8?q?=ED=9A=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../studygroup/repository/JoinRequestRepository.java | 12 +++++++++++- .../group/studygroup/service/JoinRequestService.java | 12 +++++++----- .../algohub/service/JoinRequestServiceTest.java | 4 ++-- 3 files changed, 20 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/gamzabat/algohub/feature/group/studygroup/repository/JoinRequestRepository.java b/src/main/java/com/gamzabat/algohub/feature/group/studygroup/repository/JoinRequestRepository.java index da0b4b52..092e21ca 100644 --- a/src/main/java/com/gamzabat/algohub/feature/group/studygroup/repository/JoinRequestRepository.java +++ b/src/main/java/com/gamzabat/algohub/feature/group/studygroup/repository/JoinRequestRepository.java @@ -3,6 +3,8 @@ import java.util.List; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; import com.gamzabat.algohub.feature.group.studygroup.domain.JoinRequest; @@ -10,5 +12,13 @@ public interface JoinRequestRepository extends JpaRepository boolean existsByGroup_IdAndRequester_Id(Long groupId, Long userId); - List findAllByGroup_Id(Long groupId); + @Query(""" + select jr + from JoinRequest jr + join fetch jr.requester u + join fetch jr.group g + where g.id = :groupId + """) + List findAllByGroupIdWithFetch(@Param("groupId") Long groupId); + } diff --git a/src/main/java/com/gamzabat/algohub/feature/group/studygroup/service/JoinRequestService.java b/src/main/java/com/gamzabat/algohub/feature/group/studygroup/service/JoinRequestService.java index 9056c907..5fa35895 100644 --- a/src/main/java/com/gamzabat/algohub/feature/group/studygroup/service/JoinRequestService.java +++ b/src/main/java/com/gamzabat/algohub/feature/group/studygroup/service/JoinRequestService.java @@ -2,7 +2,6 @@ import java.time.LocalDate; import java.util.List; -import java.util.Optional; import org.springframework.http.HttpStatus; import org.springframework.stereotype.Service; @@ -59,12 +58,15 @@ public void joinRequest(User user, Long groupId) { @Transactional(readOnly = true) public List getAllJoinRequests(User user, Long groupId) { StudyGroup studyGroup = studyGroupRepository.findById(groupId) - .orElseThrow(() -> new StudyGroupValidationException(HttpStatus.NOT_FOUND.value(), "존재하지 않는 그룹 입니다.")); - Optional groupMember = groupMemberRepository.findByUserAndStudyGroup(user, studyGroup); - if (groupMember.isPresent() && RoleOfGroupMember.isParticipant(groupMember.get()) || groupMember.isEmpty()) { + .orElseThrow(() -> new StudyGroupValidationException( + HttpStatus.NOT_FOUND.value(), "존재하지 않는 그룹 입니다.")); + final boolean noAuthority = groupMemberRepository.findByUserAndStudyGroup(user, studyGroup) + .map(RoleOfGroupMember::isParticipant) + .orElse(true); + if (noAuthority) { throw new JoinRequestException("요청 목록을 조회할 권한이 없습니다."); } - return joinRequestRepository.findAllByGroup_Id(groupId); + return joinRequestRepository.findAllByGroupIdWithFetch(groupId); } @Transactional diff --git a/src/test/java/com/gamzabat/algohub/service/JoinRequestServiceTest.java b/src/test/java/com/gamzabat/algohub/service/JoinRequestServiceTest.java index 39400ba9..d59eb206 100644 --- a/src/test/java/com/gamzabat/algohub/service/JoinRequestServiceTest.java +++ b/src/test/java/com/gamzabat/algohub/service/JoinRequestServiceTest.java @@ -53,7 +53,7 @@ class JoinRequestServiceTest { private NotificationSettingRepository notificationSettingRepository; @Mock private RankingRepository rankingRepository; - + private User user, owner, user2, user3, requester; private StudyGroup group; private Problem problem1, problem2; @@ -200,7 +200,7 @@ void getAllJoinRequests_Success() { // given when(studyGroupRepository.findById(10L)).thenReturn(Optional.of(group)); when(groupMemberRepository.findByUserAndStudyGroup(owner, group)).thenReturn(Optional.of(ownerGroupmember)); - when(joinRequestRepository.findAllByGroup_Id(10L)).thenReturn(List.of(joinRequest)); + when(joinRequestRepository.findAllByGroupIdWithFetch(10L)).thenReturn(List.of(joinRequest)); // when List requests = joinRequestService.getAllJoinRequests(owner, 10L);