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