diff --git a/src/main/java/com/cozymate/cozymate_server/domain/mate/repository/MateRepository.java b/src/main/java/com/cozymate/cozymate_server/domain/mate/repository/MateRepository.java index ab5d6445..5fe95824 100644 --- a/src/main/java/com/cozymate/cozymate_server/domain/mate/repository/MateRepository.java +++ b/src/main/java/com/cozymate/cozymate_server/domain/mate/repository/MateRepository.java @@ -112,4 +112,15 @@ List findAllFetchMemberAndMemberStatByEntryStatus( WHERE mt.room.id = :roomId AND mt.id != :mateId """) List findByRoomIdAndNotMateId(@Param("roomId") Long roomId, @Param("mateId") Long mateId); + + @Query(""" + SELECT mt FROM Mate mt + JOIN FETCH mt.room r + JOIN FETCH mt.member m + JOIN FETCH m.university u + WHERE mt.room.id IN :roomIdList + AND mt.isRoomManager = :isRoomManager + AND mt.entryStatus = :entryStatus +""") + List findAllByRoomIdListAndIsRoomManagerAndEntryStatus(List roomIdList, boolean isRoomManager, EntryStatus entryStatus); } diff --git a/src/main/java/com/cozymate/cozymate_server/domain/room/service/RoomRecommendService.java b/src/main/java/com/cozymate/cozymate_server/domain/room/service/RoomRecommendService.java index ca85e813..0b4e695f 100644 --- a/src/main/java/com/cozymate/cozymate_server/domain/room/service/RoomRecommendService.java +++ b/src/main/java/com/cozymate/cozymate_server/domain/room/service/RoomRecommendService.java @@ -26,12 +26,14 @@ import java.util.Optional; import java.util.stream.Collectors; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.tuple.Pair; import org.springframework.stereotype.Service; @Service @RequiredArgsConstructor @Transactional +@Slf4j public class RoomRecommendService { private final RoomRepository roomRepository; @@ -111,6 +113,20 @@ private List getRoomList(Member member) { // 모든 공개 방을 가져옴 (Public 방 중에서, Disable 상태가 아니며, 인원이 꽉 차지 않은 방) List roomList = roomRepository.findAllRoomListCanDisplay(RoomType.PUBLIC, RoomStatus.DISABLE); + // 대학교 필터링, 성별 필터링 -> TODO: 추후 room으로 해당 데이터가 저장되면 삭제 후 위 쿼리 수정 + List managerList = mateRepository.findAllByRoomIdListAndIsRoomManagerAndEntryStatus( + roomList.stream().map(Room::getId).toList(), Boolean.TRUE, EntryStatus.JOINED); + + // 대학 필터링 + managerList.stream() + .filter(manager -> !manager.getMember().getUniversity().getId().equals(member.getUniversity().getId())) + .forEach(manager -> roomList.remove(manager.getRoom())); + + // 성별 필터링 + managerList.stream() + .filter(manager -> !manager.getMember().getGender().equals(member.getGender())) + .forEach(manager -> roomList.remove(manager.getRoom())); + // 본인이 참여한 방 가져오기 Optional joinedRoom = mateRepository.findByMemberAndEntryStatus(member, EntryStatus.JOINED) .map(Mate::getRoom);