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);