차단한 유저리스트 조회 API 추가
This commit is contained in:
		| @@ -6,6 +6,7 @@ import kr.co.vividnext.sodalive.member.block.MemberBlockRequest | ||||
| import kr.co.vividnext.sodalive.member.following.CreatorFollowRequest | ||||
| import kr.co.vividnext.sodalive.member.login.LoginRequest | ||||
| import kr.co.vividnext.sodalive.member.notification.UpdateNotificationSettingRequest | ||||
| import org.springframework.data.domain.Pageable | ||||
| import org.springframework.security.core.annotation.AuthenticationPrincipal | ||||
| import org.springframework.security.core.userdetails.User | ||||
| import org.springframework.web.bind.annotation.GetMapping | ||||
| @@ -155,11 +156,18 @@ class MemberController(private val service: MemberService) { | ||||
|  | ||||
|     @GetMapping("/block") | ||||
|     fun getBlockedMemberList( | ||||
|         @AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member? | ||||
|         @AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member?, | ||||
|         pageable: Pageable | ||||
|     ) = run { | ||||
|         if (member == null) throw SodaException("로그인 정보를 확인해주세요.") | ||||
|  | ||||
|         ApiResponse.ok(service.getBlockedMemberList(member.id!!)) | ||||
|         ApiResponse.ok( | ||||
|             service.getBlockedMemberList( | ||||
|                 member.id!!, | ||||
|                 offset = pageable.offset, | ||||
|                 limit = pageable.pageSize.toLong() | ||||
|             ) | ||||
|         ) | ||||
|     } | ||||
|  | ||||
|     @PostMapping("/block") | ||||
|   | ||||
| @@ -14,6 +14,7 @@ import kr.co.vividnext.sodalive.live.reservation.LiveReservationRepository | ||||
| 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.GetBlockedMemberListResponse | ||||
| import kr.co.vividnext.sodalive.member.block.MemberBlockRequest | ||||
| import kr.co.vividnext.sodalive.member.following.CreatorFollowing | ||||
| import kr.co.vividnext.sodalive.member.following.CreatorFollowingRepository | ||||
| @@ -357,8 +358,11 @@ class MemberService( | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     fun getBlockedMemberList(memberId: Long): List<Long> { | ||||
|         return blockMemberRepository.getBlockedMemberIdList(memberId = memberId) | ||||
|     fun getBlockedMemberList(memberId: Long, offset: Long, limit: Long): GetBlockedMemberListResponse { | ||||
|         val totalCount = blockMemberRepository.getBlockedMemberTotalCount(memberId) | ||||
|         val items = blockMemberRepository.getBlockedMemberList(offset = offset, limit = limit, memberId = memberId) | ||||
|  | ||||
|         return GetBlockedMemberListResponse(totalCount = totalCount, items = items) | ||||
|     } | ||||
|  | ||||
|     @Transactional | ||||
|   | ||||
| @@ -1,7 +1,9 @@ | ||||
| package kr.co.vividnext.sodalive.member.block | ||||
|  | ||||
| import com.querydsl.jpa.impl.JPAQueryFactory | ||||
| import kr.co.vividnext.sodalive.member.QMember.member | ||||
| import kr.co.vividnext.sodalive.member.block.QBlockMember.blockMember | ||||
| import org.springframework.beans.factory.annotation.Value | ||||
| import org.springframework.data.jpa.repository.JpaRepository | ||||
| import org.springframework.stereotype.Repository | ||||
|  | ||||
| @@ -12,10 +14,17 @@ interface BlockMemberQueryRepository { | ||||
|     fun getBlockAccount(blockedMemberId: Long, memberId: Long): BlockMember? | ||||
|     fun isBlocked(blockedMemberId: Long, memberId: Long): Boolean | ||||
|     fun getBlockedMemberIdList(memberId: Long): List<Long> | ||||
|     fun getBlockedMemberList(offset: Long, limit: Long, memberId: Long): List<GetBlockedMemberListItem> | ||||
|     fun getBlockedMemberTotalCount(memberId: Long): Int | ||||
| } | ||||
|  | ||||
| @Repository | ||||
| class BlockMemberQueryRepositoryImpl(private val queryFactory: JPAQueryFactory) : BlockMemberQueryRepository { | ||||
| class BlockMemberQueryRepositoryImpl( | ||||
|     private val queryFactory: JPAQueryFactory, | ||||
|  | ||||
|     @Value("\${cloud.aws.cloud-front.host}") | ||||
|     private val cloudFrontHost: String | ||||
| ) : BlockMemberQueryRepository { | ||||
|     override fun getBlockAccount(blockedMemberId: Long, memberId: Long): BlockMember? { | ||||
|         return queryFactory | ||||
|             .selectFrom(blockMember) | ||||
| @@ -51,4 +60,37 @@ class BlockMemberQueryRepositoryImpl(private val queryFactory: JPAQueryFactory) | ||||
|             ) | ||||
|             .fetch() | ||||
|     } | ||||
|  | ||||
|     override fun getBlockedMemberList(offset: Long, limit: Long, memberId: Long): List<GetBlockedMemberListItem> { | ||||
|         return queryFactory | ||||
|             .select( | ||||
|                 QGetBlockedMemberListItem( | ||||
|                     blockMember.blockedMember.id, | ||||
|                     blockMember.blockedMember.nickname, | ||||
|                     blockMember.blockedMember.profileImage.prepend("").prepend(cloudFrontHost), | ||||
|                     blockMember.blockedMember.isActive | ||||
|                 ) | ||||
|             ) | ||||
|             .from(blockMember) | ||||
|             .innerJoin(blockMember.blockedMember, member) | ||||
|             .where( | ||||
|                 blockMember.member.id.eq(memberId) | ||||
|                     .and(blockMember.isActive.isTrue) | ||||
|             ) | ||||
|             .offset(offset) | ||||
|             .limit(limit) | ||||
|             .fetch() | ||||
|     } | ||||
|  | ||||
|     override fun getBlockedMemberTotalCount(memberId: Long): Int { | ||||
|         return queryFactory | ||||
|             .select(blockMember.id) | ||||
|             .from(blockMember) | ||||
|             .where( | ||||
|                 blockMember.member.id.eq(memberId) | ||||
|                     .and(blockMember.isActive.isTrue) | ||||
|             ) | ||||
|             .fetch() | ||||
|             .size | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -0,0 +1,15 @@ | ||||
| package kr.co.vividnext.sodalive.member.block | ||||
|  | ||||
| import com.querydsl.core.annotations.QueryProjection | ||||
|  | ||||
| data class GetBlockedMemberListResponse( | ||||
|     val totalCount: Int, | ||||
|     val items: List<GetBlockedMemberListItem> | ||||
| ) | ||||
|  | ||||
| data class GetBlockedMemberListItem @QueryProjection constructor( | ||||
|     val memberId: Long, | ||||
|     val nickname: String, | ||||
|     val profileImageUrl: String, | ||||
|     val isBlocked: Boolean | ||||
| ) | ||||
		Reference in New Issue
	
	Block a user