parent
7b957c6732
commit
00c705085e
|
@ -82,4 +82,15 @@ class AudioContentMainTabContentController(private val service: AudioContentMain
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@GetMapping("/recommend-content-by-tag")
|
||||||
|
fun getRecommendedContentByTag(
|
||||||
|
@RequestParam tag: String,
|
||||||
|
@AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member?
|
||||||
|
) = run {
|
||||||
|
if (member == null) throw SodaException("로그인 정보를 확인해주세요.")
|
||||||
|
ApiResponse.ok(
|
||||||
|
service.getRecommendedContentByTag(memberId = member.id!!, tag = tag)
|
||||||
|
)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,6 +21,7 @@ class AudioContentMainTabContentService(
|
||||||
private val audioContentThemeRepository: AudioContentThemeQueryRepository,
|
private val audioContentThemeRepository: AudioContentThemeQueryRepository,
|
||||||
private val rankingService: RankingService,
|
private val rankingService: RankingService,
|
||||||
private val eventService: EventService,
|
private val eventService: EventService,
|
||||||
|
private val tagCurationService: ContentMainTabTagCurationService,
|
||||||
private val curationRepository: AudioContentCurationQueryRepository
|
private val curationRepository: AudioContentCurationQueryRepository
|
||||||
) {
|
) {
|
||||||
fun fetchData(
|
fun fetchData(
|
||||||
|
@ -87,6 +88,18 @@ class AudioContentMainTabContentService(
|
||||||
emptyList()
|
emptyList()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
val tagList = if (isAdult) {
|
||||||
|
tagCurationService.getTagList(isAdult = isAdult)
|
||||||
|
} else {
|
||||||
|
emptyList()
|
||||||
|
}
|
||||||
|
|
||||||
|
val tagCurationContentList = if (tagList.isNotEmpty()) {
|
||||||
|
tagCurationService.getTagCurationContentList(memberId = memberId, tag = tagList[0])
|
||||||
|
} else {
|
||||||
|
emptyList()
|
||||||
|
}
|
||||||
|
|
||||||
val curationList = curationRepository.findByContentMainTabId(tabId = tabId, isAdult = isAdult)
|
val curationList = curationRepository.findByContentMainTabId(tabId = tabId, isAdult = isAdult)
|
||||||
.map {
|
.map {
|
||||||
GetContentCurationResponse(
|
GetContentCurationResponse(
|
||||||
|
@ -108,6 +121,8 @@ class AudioContentMainTabContentService(
|
||||||
contentRankCreatorList = contentRankCreatorList,
|
contentRankCreatorList = contentRankCreatorList,
|
||||||
salesCountRankContentList = salesCountRankContentList,
|
salesCountRankContentList = salesCountRankContentList,
|
||||||
eventBannerList = eventBannerList,
|
eventBannerList = eventBannerList,
|
||||||
|
tagList = tagList,
|
||||||
|
tagCurationContentList = tagCurationContentList,
|
||||||
curationList = curationList
|
curationList = curationList
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
@ -156,4 +171,8 @@ class AudioContentMainTabContentService(
|
||||||
isAdult = isAdult
|
isAdult = isAdult
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun getRecommendedContentByTag(memberId: Long, tag: String): List<GetAudioContentMainItem> {
|
||||||
|
return tagCurationService.getTagCurationContentList(memberId = memberId, tag = tag)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,70 @@
|
||||||
|
package kr.co.vividnext.sodalive.content.main.tab.content
|
||||||
|
|
||||||
|
import com.querydsl.jpa.impl.JPAQueryFactory
|
||||||
|
import kr.co.vividnext.sodalive.content.QAudioContent.audioContent
|
||||||
|
import kr.co.vividnext.sodalive.content.main.GetAudioContentMainItem
|
||||||
|
import kr.co.vividnext.sodalive.content.main.QGetAudioContentMainItem
|
||||||
|
import kr.co.vividnext.sodalive.content.main.curation.tag.QContentHashTagCuration.contentHashTagCuration
|
||||||
|
import kr.co.vividnext.sodalive.content.main.curation.tag.QContentHashTagCurationItem.contentHashTagCurationItem
|
||||||
|
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.stereotype.Repository
|
||||||
|
|
||||||
|
@Repository
|
||||||
|
class ContentMainTabTagCurationRepository(
|
||||||
|
private val queryFactory: JPAQueryFactory,
|
||||||
|
|
||||||
|
@Value("\${cloud.aws.cloud-front.host}")
|
||||||
|
private val imageHost: String
|
||||||
|
) {
|
||||||
|
fun getTagList(isAdult: Boolean): List<String> {
|
||||||
|
var where = contentHashTagCuration.isActive.isTrue
|
||||||
|
|
||||||
|
if (!isAdult) {
|
||||||
|
where = where.and(contentHashTagCuration.isAdult.isFalse)
|
||||||
|
}
|
||||||
|
|
||||||
|
return queryFactory
|
||||||
|
.select(contentHashTagCuration.tag)
|
||||||
|
.from(contentHashTagCuration)
|
||||||
|
.where(where)
|
||||||
|
.orderBy(contentHashTagCuration.orders.asc())
|
||||||
|
.fetch()
|
||||||
|
}
|
||||||
|
|
||||||
|
fun getTagCurationContentList(memberId: Long, tag: String): List<GetAudioContentMainItem> {
|
||||||
|
val blockMemberCondition = blockMember.member.id.eq(member.id)
|
||||||
|
.and(blockMember.isActive.isTrue)
|
||||||
|
.and(blockMember.blockedMember.id.eq(memberId))
|
||||||
|
|
||||||
|
val where = audioContent.isActive.isTrue
|
||||||
|
.and(audioContent.duration.isNotNull)
|
||||||
|
.and(audioContent.limited.isNull)
|
||||||
|
.and(blockMember.id.isNull)
|
||||||
|
.and(contentHashTagCurationItem.isActive.isTrue)
|
||||||
|
.and(contentHashTagCuration.tag.eq(tag))
|
||||||
|
|
||||||
|
return queryFactory
|
||||||
|
.select(
|
||||||
|
QGetAudioContentMainItem(
|
||||||
|
audioContent.id,
|
||||||
|
audioContent.coverImage.prepend("/").prepend(imageHost),
|
||||||
|
audioContent.title,
|
||||||
|
member.id,
|
||||||
|
member.profileImage.prepend("/").prepend(imageHost),
|
||||||
|
member.nickname,
|
||||||
|
audioContent.price,
|
||||||
|
audioContent.duration
|
||||||
|
)
|
||||||
|
)
|
||||||
|
.from(contentHashTagCurationItem)
|
||||||
|
.innerJoin(contentHashTagCurationItem.curation, contentHashTagCuration)
|
||||||
|
.innerJoin(contentHashTagCurationItem.content, audioContent)
|
||||||
|
.innerJoin(audioContent.member, member)
|
||||||
|
.leftJoin(blockMember).on(blockMemberCondition)
|
||||||
|
.where(where)
|
||||||
|
.orderBy(contentHashTagCurationItem.orders.asc())
|
||||||
|
.fetch()
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,15 @@
|
||||||
|
package kr.co.vividnext.sodalive.content.main.tab.content
|
||||||
|
|
||||||
|
import kr.co.vividnext.sodalive.content.main.GetAudioContentMainItem
|
||||||
|
import org.springframework.stereotype.Service
|
||||||
|
|
||||||
|
@Service
|
||||||
|
class ContentMainTabTagCurationService(private val repository: ContentMainTabTagCurationRepository) {
|
||||||
|
fun getTagList(isAdult: Boolean): List<String> {
|
||||||
|
return repository.getTagList(isAdult = isAdult)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun getTagCurationContentList(memberId: Long, tag: String): List<GetAudioContentMainItem> {
|
||||||
|
return repository.getTagCurationContentList(memberId = memberId, tag = tag)
|
||||||
|
}
|
||||||
|
}
|
|
@ -17,5 +17,7 @@ data class GetContentMainTabContentResponse(
|
||||||
val contentRankCreatorList: List<ContentCreatorResponse>,
|
val contentRankCreatorList: List<ContentCreatorResponse>,
|
||||||
val salesCountRankContentList: List<GetAudioContentRankingItem>,
|
val salesCountRankContentList: List<GetAudioContentRankingItem>,
|
||||||
val eventBannerList: GetEventResponse,
|
val eventBannerList: GetEventResponse,
|
||||||
|
val tagList: List<String>,
|
||||||
|
val tagCurationContentList: List<GetAudioContentMainItem>,
|
||||||
val curationList: List<GetContentCurationResponse>
|
val curationList: List<GetContentCurationResponse>
|
||||||
)
|
)
|
||||||
|
|
Loading…
Reference in New Issue