팔로잉 채널 전체보기 API 추가
This commit is contained in:
parent
ba3444fd26
commit
777f4755be
|
@ -0,0 +1,13 @@
|
|||
package kr.co.vividnext.sodalive.live.recommend
|
||||
|
||||
data class GetCreatorFollowingAllListResponse(
|
||||
val totalCount: Int,
|
||||
val items: List<GetCreatorFollowingAllListItem>
|
||||
)
|
||||
|
||||
data class GetCreatorFollowingAllListItem(
|
||||
val creatorId: Long,
|
||||
val nickname: String,
|
||||
val profileImageUrl: String,
|
||||
val isFollow: Boolean
|
||||
)
|
|
@ -3,6 +3,7 @@ package kr.co.vividnext.sodalive.live.recommend
|
|||
import kr.co.vividnext.sodalive.common.ApiResponse
|
||||
import kr.co.vividnext.sodalive.common.SodaException
|
||||
import kr.co.vividnext.sodalive.member.Member
|
||||
import org.springframework.data.domain.Pageable
|
||||
import org.springframework.security.core.annotation.AuthenticationPrincipal
|
||||
import org.springframework.web.bind.annotation.GetMapping
|
||||
import org.springframework.web.bind.annotation.RequestMapping
|
||||
|
@ -37,4 +38,14 @@ class LiveRecommendController(private val service: LiveRecommendService) {
|
|||
|
||||
ApiResponse.ok(service.getFollowingChannelList(member))
|
||||
}
|
||||
|
||||
@GetMapping("/following/channel/all/list")
|
||||
fun getFollowingAllChannelList(
|
||||
@AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member?,
|
||||
pageable: Pageable
|
||||
) = run {
|
||||
if (member == null) throw SodaException("로그인 정보를 확인해주세요.")
|
||||
|
||||
ApiResponse.ok(service.getFollowingAllChannelList(member, pageable))
|
||||
}
|
||||
}
|
||||
|
|
|
@ -182,4 +182,56 @@ class LiveRecommendRepository(
|
|||
.limit(limit)
|
||||
.fetch()
|
||||
}
|
||||
|
||||
fun getCreatorFollowingAllListTotalCount(memberId: Long, isBlocked: (Long) -> Boolean): Int {
|
||||
val where = member.role.eq(MemberRole.CREATOR)
|
||||
.and(member.isActive.isTrue)
|
||||
.and(creatorFollowing.isActive.isTrue)
|
||||
.and(creatorFollowing.member.id.eq(memberId))
|
||||
|
||||
return queryFactory
|
||||
.select(creatorFollowing.creator.id)
|
||||
.from(creatorFollowing)
|
||||
.innerJoin(creatorFollowing.creator, member)
|
||||
.where(where)
|
||||
.groupBy(member.id)
|
||||
.fetch()
|
||||
.asSequence()
|
||||
.filter { !isBlocked(it) }
|
||||
.toList()
|
||||
.size
|
||||
}
|
||||
|
||||
fun getCreatorFollowingAllList(
|
||||
memberId: Long,
|
||||
offset: Long,
|
||||
limit: Long,
|
||||
isBlocked: (Long) -> Boolean
|
||||
): List<GetCreatorFollowingAllListItem> {
|
||||
val where = member.role.eq(MemberRole.CREATOR)
|
||||
.and(member.isActive.isTrue)
|
||||
.and(creatorFollowing.isActive.isTrue)
|
||||
.and(creatorFollowing.member.id.eq(memberId))
|
||||
|
||||
return queryFactory
|
||||
.select(
|
||||
Projections.constructor(
|
||||
GetCreatorFollowingAllListItem::class.java,
|
||||
member.id,
|
||||
member.nickname,
|
||||
member.profileImage.prepend("/").prepend(cloudFrontHost),
|
||||
Expressions.asBoolean(true)
|
||||
)
|
||||
)
|
||||
.from(creatorFollowing)
|
||||
.innerJoin(creatorFollowing.creator, member)
|
||||
.where(where)
|
||||
.groupBy(member.id)
|
||||
.offset(offset)
|
||||
.limit(limit)
|
||||
.fetch()
|
||||
.asSequence()
|
||||
.filter { !isBlocked(it.creatorId) }
|
||||
.toList()
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2,6 +2,7 @@ package kr.co.vividnext.sodalive.live.recommend
|
|||
|
||||
import kr.co.vividnext.sodalive.member.Member
|
||||
import kr.co.vividnext.sodalive.member.block.BlockMemberRepository
|
||||
import org.springframework.data.domain.Pageable
|
||||
import org.springframework.stereotype.Service
|
||||
|
||||
@Service
|
||||
|
@ -66,4 +67,23 @@ class LiveRecommendService(
|
|||
|
||||
return onAirFollowingChannelList + notOnAirFollowingChannelList
|
||||
}
|
||||
|
||||
fun getFollowingAllChannelList(member: Member, pageable: Pageable): GetCreatorFollowingAllListResponse {
|
||||
val totalCount = repository.getCreatorFollowingAllListTotalCount(
|
||||
memberId = member.id!!,
|
||||
isBlocked = { blockMemberRepository.isBlocked(blockedMemberId = member.id!!, memberId = it) }
|
||||
)
|
||||
|
||||
val items = repository.getCreatorFollowingAllList(
|
||||
memberId = member.id!!,
|
||||
offset = pageable.offset,
|
||||
limit = pageable.pageSize.toLong(),
|
||||
isBlocked = { blockMemberRepository.isBlocked(blockedMemberId = member.id!!, memberId = it) }
|
||||
)
|
||||
|
||||
return GetCreatorFollowingAllListResponse(
|
||||
totalCount = totalCount,
|
||||
items = items
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue