메시지 보내기 유저 검색 #91
| @@ -240,6 +240,6 @@ class LiveRoomController( | ||||
|     ) = run { | ||||
|         if (member == null) throw SodaException("로그인 정보를 확인해주세요.") | ||||
|  | ||||
|         ApiResponse.ok(visitService.getRecentVisitRoomUsers(member.id!!)) | ||||
|         ApiResponse.ok(visitService.getRecentVisitRoomUsers(member)) | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -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<LiveRoomVisit, Long>, LiveRoom | ||||
| interface LiveRoomVisitQueryRepository { | ||||
|     fun findByRoomIdAndMemberId(roomId: Long, memberId: Long): LiveRoomVisit? | ||||
|     fun findFirstByMemberIdOrderByUpdatedAtDesc(memberId: Long): LiveRoomVisit? | ||||
|     fun getRecentVisitRoomUsers(roomId: Long, memberId: Long): List<Member> | ||||
|     fun getRecentVisitRoomUsers(roomId: Long, member: Member): List<Member> | ||||
| } | ||||
|  | ||||
| @Repository | ||||
| @@ -43,19 +44,25 @@ class LiveRoomVisitQueryRepositoryImpl(private val queryFactory: JPAQueryFactory | ||||
|             .fetchFirst() | ||||
|     } | ||||
|  | ||||
|     override fun getRecentVisitRoomUsers(roomId: Long, memberId: Long): List<Member> { | ||||
|     override fun getRecentVisitRoomUsers(roomId: Long, member: Member): List<Member> { | ||||
|         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() | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -30,11 +30,11 @@ class LiveRoomVisitService( | ||||
|         repository.save(roomVisit) | ||||
|     } | ||||
|  | ||||
|     fun getRecentVisitRoomUsers(memberId: Long): List<GetRoomDetailUser> { | ||||
|         val roomVisit = repository.findFirstByMemberIdOrderByUpdatedAtDesc(memberId) | ||||
|     fun getRecentVisitRoomUsers(member: Member): List<GetRoomDetailUser> { | ||||
|         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() | ||||
|   | ||||
| @@ -165,7 +165,7 @@ class MemberController(private val service: MemberService) { | ||||
|     ) = run { | ||||
|         if (member == null) throw SodaException("로그인 정보를 확인해주세요.") | ||||
|  | ||||
|         ApiResponse.ok(service.searchMember(nickname = nickname, memberId = member.id!!)) | ||||
|         ApiResponse.ok(service.searchMember(nickname = nickname, member = member)) | ||||
|     } | ||||
|  | ||||
|     @PostMapping("/sign_out") | ||||
|   | ||||
| @@ -23,7 +23,7 @@ interface MemberRepository : JpaRepository<Member, Long>, MemberQueryRepository | ||||
|  | ||||
| interface MemberQueryRepository { | ||||
|     fun findByPushToken(pushToken: String): List<Member> | ||||
|     fun findByNicknameAndOtherCondition(nickname: String, memberId: Long): List<Member> | ||||
|     fun findByNicknameAndOtherCondition(nickname: String, member: Member): List<Member> | ||||
|     fun findCreatorByIdOrNull(memberId: Long): Member? | ||||
|     fun getAllRecipientPushTokens(isAuth: Boolean, container: String): List<List<String>> | ||||
|     fun getCreateLiveRoomNotificationRecipientPushTokens( | ||||
| @@ -66,15 +66,20 @@ class MemberQueryRepositoryImpl( | ||||
|             .fetch() | ||||
|     } | ||||
|  | ||||
|     override fun findByNicknameAndOtherCondition(nickname: String, memberId: Long): List<Member> { | ||||
|     override fun findByNicknameAndOtherCondition(nickname: String, member: Member): List<Member> { | ||||
|         var where = QMember.member.nickname.containsIgnoreCase(nickname) | ||||
|             .and(QMember.member.id.ne(member.id)) | ||||
|             .and(QMember.member.role.ne(MemberRole.ADMIN)) | ||||
|             .and(QMember.member.role.ne(MemberRole.AGENT)) | ||||
|             .and(QMember.member.role.ne(MemberRole.BOT)) | ||||
|  | ||||
|         if (member.role == MemberRole.USER) { | ||||
|             where = where.and(QMember.member.role.ne(MemberRole.USER)) | ||||
|         } | ||||
|  | ||||
|         return queryFactory | ||||
|             .selectFrom(member) | ||||
|             .where( | ||||
|                 member.nickname.containsIgnoreCase(nickname) | ||||
|                     .and(member.id.ne(memberId)) | ||||
|                     .and(member.role.ne(MemberRole.ADMIN)) | ||||
|                     .and(member.role.ne(MemberRole.AGENT)) | ||||
|             ) | ||||
|             .selectFrom(QMember.member) | ||||
|             .where(where) | ||||
|             .fetch() | ||||
|     } | ||||
|  | ||||
|   | ||||
| @@ -382,14 +382,14 @@ class MemberService( | ||||
|  | ||||
|     fun isBlocked(blockedMemberId: Long, memberId: Long) = blockMemberRepository.isBlocked(blockedMemberId, memberId) | ||||
|  | ||||
|     fun searchMember(nickname: String, memberId: Long): List<GetRoomDetailUser> { | ||||
|     fun searchMember(nickname: String, member: Member): List<GetRoomDetailUser> { | ||||
|         if (nickname.length < 2) { | ||||
|             throw SodaException("두 글자 이상 입력 하셔야 합니다.") | ||||
|         } | ||||
|  | ||||
|         return repository.findByNicknameAndOtherCondition(nickname, memberId) | ||||
|         return repository.findByNicknameAndOtherCondition(nickname, member) | ||||
|             .asSequence() | ||||
|             .filter { !blockMemberRepository.isBlocked(blockedMemberId = memberId, memberId = it.id!!) } | ||||
|             .filter { !blockMemberRepository.isBlocked(blockedMemberId = member.id!!, memberId = it.id!!) } | ||||
|             .map { | ||||
|                 GetRoomDetailUser(it, cloudFrontHost) | ||||
|             } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user