diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/live/room/LiveRoomController.kt b/src/main/kotlin/kr/co/vividnext/sodalive/live/room/LiveRoomController.kt index 6d8daac..b034601 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/live/room/LiveRoomController.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/live/room/LiveRoomController.kt @@ -240,6 +240,6 @@ class LiveRoomController( ) = run { if (member == null) throw SodaException("로그인 정보를 확인해주세요.") - ApiResponse.ok(visitService.getRecentVisitRoomUsers(member.id!!)) + ApiResponse.ok(visitService.getRecentVisitRoomUsers(member)) } } diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/live/room/visit/LiveRoomVisitRepository.kt b/src/main/kotlin/kr/co/vividnext/sodalive/live/room/visit/LiveRoomVisitRepository.kt index bbf9f90..3ab4ce0 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/live/room/visit/LiveRoomVisitRepository.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/live/room/visit/LiveRoomVisitRepository.kt @@ -5,6 +5,7 @@ import kr.co.vividnext.sodalive.live.room.QLiveRoom.liveRoom import kr.co.vividnext.sodalive.live.room.visit.QLiveRoomVisit.liveRoomVisit import kr.co.vividnext.sodalive.member.Member import kr.co.vividnext.sodalive.member.MemberRole +import kr.co.vividnext.sodalive.member.QMember import kr.co.vividnext.sodalive.member.QMember.member import org.springframework.data.jpa.repository.JpaRepository import org.springframework.stereotype.Repository @@ -15,7 +16,7 @@ interface LiveRoomVisitRepository : JpaRepository, LiveRoom interface LiveRoomVisitQueryRepository { fun findByRoomIdAndMemberId(roomId: Long, memberId: Long): LiveRoomVisit? fun findFirstByMemberIdOrderByUpdatedAtDesc(memberId: Long): LiveRoomVisit? - fun getRecentVisitRoomUsers(roomId: Long, memberId: Long): List + fun getRecentVisitRoomUsers(roomId: Long, member: Member): List } @Repository @@ -43,19 +44,25 @@ class LiveRoomVisitQueryRepositoryImpl(private val queryFactory: JPAQueryFactory .fetchFirst() } - override fun getRecentVisitRoomUsers(roomId: Long, memberId: Long): List { + override fun getRecentVisitRoomUsers(roomId: Long, member: Member): List { + var where = liveRoomVisit.room.id.eq(roomId) + .and(liveRoomVisit.member.isActive.isTrue) + .and(liveRoomVisit.member.id.ne(member.id)) + .and(liveRoomVisit.member.role.ne(MemberRole.ADMIN)) + .and(liveRoomVisit.member.role.ne(MemberRole.AGENT)) + .and(liveRoomVisit.member.role.ne(MemberRole.BOT)) + + if (member.role == MemberRole.USER) { + where = where + .and(liveRoomVisit.member.role.ne(MemberRole.USER)) + } + return queryFactory - .select(member) + .select(QMember.member) .from(liveRoomVisit) - .innerJoin(liveRoomVisit.member, member) + .innerJoin(liveRoomVisit.member, QMember.member) .innerJoin(liveRoomVisit.room, liveRoom) - .where( - liveRoomVisit.room.id.eq(roomId) - .and(liveRoomVisit.member.isActive.isTrue) - .and(liveRoomVisit.member.id.ne(memberId)) - .and(liveRoomVisit.member.role.ne(MemberRole.ADMIN)) - .and(liveRoomVisit.member.role.ne(MemberRole.AGENT)) - ) + .where(where) .fetch() } } diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/live/room/visit/LiveRoomVisitService.kt b/src/main/kotlin/kr/co/vividnext/sodalive/live/room/visit/LiveRoomVisitService.kt index 0e89fd0..9beb448 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/live/room/visit/LiveRoomVisitService.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/live/room/visit/LiveRoomVisitService.kt @@ -30,11 +30,11 @@ class LiveRoomVisitService( repository.save(roomVisit) } - fun getRecentVisitRoomUsers(memberId: Long): List { - val roomVisit = repository.findFirstByMemberIdOrderByUpdatedAtDesc(memberId) + fun getRecentVisitRoomUsers(member: Member): List { + val roomVisit = repository.findFirstByMemberIdOrderByUpdatedAtDesc(member.id!!) ?: return emptyList() - return repository.getRecentVisitRoomUsers(roomVisit.room!!.id!!, memberId) + return repository.getRecentVisitRoomUsers(roomVisit.room!!.id!!, member) .asSequence() .map { GetRoomDetailUser(it, cloudFrontHost) } .toList()