feat(creator-channel): 홈 커뮤니티 조회를 공용 서비스로 연결한다

This commit is contained in:
2026-06-21 23:19:37 +09:00
parent 06e82f1bba
commit 6ab3c50c32
3 changed files with 15 additions and 42 deletions

View File

@@ -3,8 +3,8 @@ package kr.co.vividnext.sodalive.v2.api.creator.channel.home.dto
import com.fasterxml.jackson.annotation.JsonProperty import com.fasterxml.jackson.annotation.JsonProperty
import kr.co.vividnext.sodalive.v2.api.creator.channel.common.dto.CreatorChannelAudioContentResponse import kr.co.vividnext.sodalive.v2.api.creator.channel.common.dto.CreatorChannelAudioContentResponse
import kr.co.vividnext.sodalive.v2.common.domain.CreatorActivityType import kr.co.vividnext.sodalive.v2.common.domain.CreatorActivityType
import kr.co.vividnext.sodalive.v2.creator.channel.community.domain.CreatorChannelCommunityPost
import kr.co.vividnext.sodalive.v2.creator.channel.home.domain.CreatorChannelActivity import kr.co.vividnext.sodalive.v2.creator.channel.home.domain.CreatorChannelActivity
import kr.co.vividnext.sodalive.v2.creator.channel.home.domain.CreatorChannelCommunityPost
import kr.co.vividnext.sodalive.v2.creator.channel.home.domain.CreatorChannelCreator import kr.co.vividnext.sodalive.v2.creator.channel.home.domain.CreatorChannelCreator
import kr.co.vividnext.sodalive.v2.creator.channel.home.domain.CreatorChannelDonation import kr.co.vividnext.sodalive.v2.creator.channel.home.domain.CreatorChannelDonation
import kr.co.vividnext.sodalive.v2.creator.channel.home.domain.CreatorChannelFanTalk import kr.co.vividnext.sodalive.v2.creator.channel.home.domain.CreatorChannelFanTalk
@@ -195,7 +195,7 @@ data class CreatorChannelCommunityPostResponse(
audioUrl = post.audioUrl, audioUrl = post.audioUrl,
content = post.content, content = post.content,
price = post.price, price = post.price,
dateUtc = post.date.toUtcIso(), dateUtc = post.createdAt.toUtcIso(),
existOrdered = post.existOrdered, existOrdered = post.existOrdered,
likeCount = post.likeCount, likeCount = post.likeCount,
commentCount = post.commentCount commentCount = post.commentCount

View File

@@ -10,8 +10,8 @@ import kr.co.vividnext.sodalive.member.contentpreference.MemberContentPreference
import kr.co.vividnext.sodalive.member.contentpreference.isAdultVisibleByPolicy import kr.co.vividnext.sodalive.member.contentpreference.isAdultVisibleByPolicy
import kr.co.vividnext.sodalive.v2.common.domain.toCdnUrl import kr.co.vividnext.sodalive.v2.common.domain.toCdnUrl
import kr.co.vividnext.sodalive.v2.creator.channel.common.domain.CreatorChannelAudioContent import kr.co.vividnext.sodalive.v2.creator.channel.common.domain.CreatorChannelAudioContent
import kr.co.vividnext.sodalive.v2.creator.channel.community.application.CreatorChannelCommunityQueryService
import kr.co.vividnext.sodalive.v2.creator.channel.home.domain.CreatorChannelActivity import kr.co.vividnext.sodalive.v2.creator.channel.home.domain.CreatorChannelActivity
import kr.co.vividnext.sodalive.v2.creator.channel.home.domain.CreatorChannelCommunityPost
import kr.co.vividnext.sodalive.v2.creator.channel.home.domain.CreatorChannelCreator import kr.co.vividnext.sodalive.v2.creator.channel.home.domain.CreatorChannelCreator
import kr.co.vividnext.sodalive.v2.creator.channel.home.domain.CreatorChannelDonation import kr.co.vividnext.sodalive.v2.creator.channel.home.domain.CreatorChannelDonation
import kr.co.vividnext.sodalive.v2.creator.channel.home.domain.CreatorChannelFanTalk import kr.co.vividnext.sodalive.v2.creator.channel.home.domain.CreatorChannelFanTalk
@@ -24,7 +24,6 @@ import kr.co.vividnext.sodalive.v2.creator.channel.home.domain.CreatorChannelSer
import kr.co.vividnext.sodalive.v2.creator.channel.home.domain.CreatorChannelSns import kr.co.vividnext.sodalive.v2.creator.channel.home.domain.CreatorChannelSns
import kr.co.vividnext.sodalive.v2.creator.channel.home.port.out.CreatorChannelActivityRecord import kr.co.vividnext.sodalive.v2.creator.channel.home.port.out.CreatorChannelActivityRecord
import kr.co.vividnext.sodalive.v2.creator.channel.home.port.out.CreatorChannelAudioContentRecord import kr.co.vividnext.sodalive.v2.creator.channel.home.port.out.CreatorChannelAudioContentRecord
import kr.co.vividnext.sodalive.v2.creator.channel.home.port.out.CreatorChannelCommunityPostRecord
import kr.co.vividnext.sodalive.v2.creator.channel.home.port.out.CreatorChannelCreatorRecord import kr.co.vividnext.sodalive.v2.creator.channel.home.port.out.CreatorChannelCreatorRecord
import kr.co.vividnext.sodalive.v2.creator.channel.home.port.out.CreatorChannelDonationRecord import kr.co.vividnext.sodalive.v2.creator.channel.home.port.out.CreatorChannelDonationRecord
import kr.co.vividnext.sodalive.v2.creator.channel.home.port.out.CreatorChannelFanTalkRecord import kr.co.vividnext.sodalive.v2.creator.channel.home.port.out.CreatorChannelFanTalkRecord
@@ -43,6 +42,7 @@ import java.time.LocalDateTime
@Transactional(readOnly = true) @Transactional(readOnly = true)
class CreatorChannelHomeQueryService( class CreatorChannelHomeQueryService(
private val queryPort: CreatorChannelHomeQueryPort, private val queryPort: CreatorChannelHomeQueryPort,
private val communityQueryService: CreatorChannelCommunityQueryService,
private val queryPolicy: CreatorChannelHomeQueryPolicy, private val queryPolicy: CreatorChannelHomeQueryPolicy,
private val memberContentPreferenceService: MemberContentPreferenceService, private val memberContentPreferenceService: MemberContentPreferenceService,
private val messageSource: SodaMessageSource, private val messageSource: SodaMessageSource,
@@ -98,12 +98,13 @@ class CreatorChannelHomeQueryService(
)?.toDomain(), )?.toDomain(),
latestAudioContent = latestAudioContent, latestAudioContent = latestAudioContent,
channelDonations = queryPort.findChannelDonations(creatorId, viewerId, now).map { it.toDomain() }, channelDonations = queryPort.findChannelDonations(creatorId, viewerId, now).map { it.toDomain() },
notices = queryPort.findCommunityPosts( notices = communityQueryService.findHomeCommunityPosts(
creatorId = creatorId, creatorId = creatorId,
viewerId = viewerId, viewerId = viewerId,
isFixed = true, isPinned = true,
canViewAdultContent = canViewAdultContent canViewAdultContent = canViewAdultContent,
).map { it.toDomain() }, limit = 3
),
schedules = queryPolicy.limitSchedules( schedules = queryPolicy.limitSchedules(
queryPort.findSchedules( queryPort.findSchedules(
creatorId = creatorId, creatorId = creatorId,
@@ -124,12 +125,13 @@ class CreatorChannelHomeQueryService(
canViewAdultContent = canViewAdultContent, canViewAdultContent = canViewAdultContent,
contentType = preference.contentType contentType = preference.contentType
).map { it.toDomain() }, ).map { it.toDomain() },
communities = queryPort.findCommunityPosts( communities = communityQueryService.findHomeCommunityPosts(
creatorId = creatorId, creatorId = creatorId,
viewerId = viewerId, viewerId = viewerId,
isFixed = false, isPinned = false,
canViewAdultContent = canViewAdultContent canViewAdultContent = canViewAdultContent,
).map { it.toDomain() }, limit = 3
),
fanTalk = queryPort.findFanTalkSummary(creatorId, viewerId).toDomain(), fanTalk = queryPort.findFanTalkSummary(creatorId, viewerId).toDomain(),
introduce = creator.introduce, introduce = creator.introduce,
activity = queryPort.findActivity(creatorId, now).toDomain(), activity = queryPort.findActivity(creatorId, now).toDomain(),
@@ -210,21 +212,6 @@ class CreatorChannelHomeQueryService(
isOriginal = isOriginal isOriginal = isOriginal
) )
private fun CreatorChannelCommunityPostRecord.toDomain() = CreatorChannelCommunityPost(
postId = postId,
creatorId = creatorId,
creatorNickname = creatorNickname,
creatorProfileUrl = creatorProfilePath.toCdnUrl(cloudFrontHost) ?: defaultProfileImageUrl(),
imageUrl = imagePath.toCdnUrl(cloudFrontHost),
audioUrl = audioPath.toCdnUrl(cloudFrontHost),
content = content,
price = price,
date = date,
existOrdered = existOrdered,
likeCount = likeCount,
commentCount = commentCount
)
private fun CreatorChannelFanTalkSummaryRecord.toDomain() = CreatorChannelFanTalkSummary( private fun CreatorChannelFanTalkSummaryRecord.toDomain() = CreatorChannelFanTalkSummary(
totalCount = totalCount, totalCount = totalCount,
latestFanTalk = latestFanTalk?.toDomain() latestFanTalk = latestFanTalk?.toDomain()

View File

@@ -2,6 +2,7 @@ package kr.co.vividnext.sodalive.v2.creator.channel.home.domain
import kr.co.vividnext.sodalive.v2.common.domain.CreatorActivityType import kr.co.vividnext.sodalive.v2.common.domain.CreatorActivityType
import kr.co.vividnext.sodalive.v2.creator.channel.common.domain.CreatorChannelAudioContent import kr.co.vividnext.sodalive.v2.creator.channel.common.domain.CreatorChannelAudioContent
import kr.co.vividnext.sodalive.v2.creator.channel.community.domain.CreatorChannelCommunityPost
import java.time.LocalDateTime import java.time.LocalDateTime
data class CreatorChannelHome( data class CreatorChannelHome(
@@ -66,21 +67,6 @@ data class CreatorChannelSeries(
val isOriginal: Boolean val isOriginal: Boolean
) )
data class CreatorChannelCommunityPost(
val postId: Long,
val creatorId: Long,
val creatorNickname: String,
val creatorProfileUrl: String,
val imageUrl: String?,
val audioUrl: String?,
val content: String,
val price: Int,
val date: LocalDateTime,
val existOrdered: Boolean,
val likeCount: Int,
val commentCount: Int
)
data class CreatorChannelFanTalkSummary( data class CreatorChannelFanTalkSummary(
val totalCount: Int, val totalCount: Int,
val latestFanTalk: CreatorChannelFanTalk? val latestFanTalk: CreatorChannelFanTalk?