Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[COZY-492] feat: 방 추천에 대학교, 성별 필터링 추가 #252

Open
wants to merge 1 commit into
base: develop
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -112,4 +112,15 @@ List<Mate> findAllFetchMemberAndMemberStatByEntryStatus(
WHERE mt.room.id = :roomId AND mt.id != :mateId
""")
List<Mate> 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<Mate> findAllByRoomIdListAndIsRoomManagerAndEntryStatus(List<Long> roomIdList, boolean isRoomManager, EntryStatus entryStatus);
Comment on lines +116 to +125
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

가져온 방의 id를 바탕으로 방장의 정보를 가져옵니다.
방장의 roomId가 무엇인지 알아야하기 때문에 room과 join을 했고
대학 id가 무엇인지 알아야하기 때문에 member university와 join을 했습니다.

}
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -111,6 +113,20 @@ private List<Room> getRoomList(Member member) {
// 모든 공개 방을 가져옴 (Public 방 중에서, Disable 상태가 아니며, 인원이 꽉 차지 않은 방)
List<Room> roomList = roomRepository.findAllRoomListCanDisplay(RoomType.PUBLIC, RoomStatus.DISABLE);

// 대학교 필터링, 성별 필터링 -> TODO: 추후 room으로 해당 데이터가 저장되면 삭제 후 위 쿼리 수정
List<Mate> 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()));
Comment on lines +120 to +128
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

단순 필터링입니다.
좀 더 읽기 편하라고 이렇게 작성했습니다.
어차피 이후에 room에 추가되면 삭제될 코드이기도 하고요


// 본인이 참여한 방 가져오기
Optional<Room> joinedRoom = mateRepository.findByMemberAndEntryStatus(member, EntryStatus.JOINED)
.map(Mate::getRoom);
Expand Down