메시지 API

This commit is contained in:
2023-08-02 14:04:31 +09:00
parent c25b105d4d
commit b3d72ead1f
12 changed files with 685 additions and 2 deletions

View File

@@ -114,4 +114,14 @@ class MemberController(private val service: MemberService) {
ApiResponse.ok(service.memberUnBlock(request = request, memberId = member.id!!))
}
@GetMapping("/search")
fun searchMember(
@RequestParam nickname: String,
@AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member?
) = run {
if (member == null) throw SodaException("로그인 정보를 확인해주세요.")
ApiResponse.ok(service.searchMember(nickname = nickname, memberId = member.id!!))
}
}

View File

@@ -13,6 +13,7 @@ interface MemberRepository : JpaRepository<Member, Long>, MemberQueryRepository
interface MemberQueryRepository {
fun findByPushToken(pushToken: String): List<Member>
fun findByNicknameAndOtherCondition(nickname: String, memberId: Long): List<Member>
}
@Repository
@@ -23,4 +24,16 @@ class MemberQueryRepositoryImpl(private val queryFactory: JPAQueryFactory) : Mem
.where(member.pushToken.eq(pushToken))
.fetch()
}
override fun findByNicknameAndOtherCondition(nickname: String, memberId: Long): List<Member> {
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))
)
.fetch()
}
}

View File

@@ -6,6 +6,7 @@ import kr.co.vividnext.sodalive.aws.s3.S3Uploader
import kr.co.vividnext.sodalive.common.ApiResponse
import kr.co.vividnext.sodalive.common.SodaException
import kr.co.vividnext.sodalive.jwt.TokenProvider
import kr.co.vividnext.sodalive.live.room.detail.GetRoomDetailUser
import kr.co.vividnext.sodalive.member.block.BlockMember
import kr.co.vividnext.sodalive.member.block.BlockMemberRepository
import kr.co.vividnext.sodalive.member.block.MemberBlockRequest
@@ -334,4 +335,18 @@ class MemberService(
}
fun isBlocked(blockedMemberId: Long, memberId: Long) = blockMemberRepository.isBlocked(blockedMemberId, memberId)
fun searchMember(nickname: String, memberId: Long): List<GetRoomDetailUser> {
if (nickname.length < 2) {
throw SodaException("두 글자 이상 입력 하셔야 합니다.")
}
return repository.findByNicknameAndOtherCondition(nickname, memberId)
.asSequence()
.filter { blockMemberRepository.isBlocked(blockedMemberId = memberId, memberId = it.id!!) }
.map {
GetRoomDetailUser(it, cloudFrontHost)
}
.toList()
}
}