feat(audio-recommendation): 오디오 추천 응답 변환을 추가한다
This commit is contained in:
@@ -0,0 +1,15 @@
|
||||
package kr.co.vividnext.sodalive.v2.api.audio.recommendation.application
|
||||
|
||||
import kr.co.vividnext.sodalive.member.Member
|
||||
import kr.co.vividnext.sodalive.v2.api.audio.recommendation.dto.AudioRecommendationsResponse
|
||||
import kr.co.vividnext.sodalive.v2.audio.recommendation.application.AudioRecommendationQueryService
|
||||
import org.springframework.stereotype.Component
|
||||
|
||||
@Component
|
||||
class AudioRecommendationFacade(
|
||||
private val queryService: AudioRecommendationQueryService
|
||||
) {
|
||||
fun getRecommendations(member: Member?): AudioRecommendationsResponse {
|
||||
return AudioRecommendationsResponse.from(queryService.getRecommendations(member))
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,99 @@
|
||||
package kr.co.vividnext.sodalive.v2.api.audio.recommendation.dto
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonProperty
|
||||
import kr.co.vividnext.sodalive.v2.api.common.dto.RecommendationBannerResponse
|
||||
import kr.co.vividnext.sodalive.v2.audio.recommendation.domain.AudioCard
|
||||
import kr.co.vividnext.sodalive.v2.audio.recommendation.domain.AudioRecommendations
|
||||
import kr.co.vividnext.sodalive.v2.audio.recommendation.domain.CommentedAudio
|
||||
import kr.co.vividnext.sodalive.v2.audio.recommendation.domain.OriginalSeries
|
||||
|
||||
data class AudioRecommendationsResponse(
|
||||
val banners: List<RecommendationBannerResponse>,
|
||||
val originalSeries: List<OriginalSeriesResponse>,
|
||||
val latestAudios: List<AudioCardResponse>,
|
||||
val newAndHotAudios: List<AudioCardResponse>,
|
||||
val freeAudios: List<AudioCardResponse>,
|
||||
val pointAudios: List<AudioCardResponse>,
|
||||
val mostCommentedAudios: List<CommentedAudioResponse>,
|
||||
val recommendedAudios: List<AudioCardResponse>
|
||||
) {
|
||||
companion object {
|
||||
fun from(recommendations: AudioRecommendations): AudioRecommendationsResponse {
|
||||
return AudioRecommendationsResponse(
|
||||
banners = recommendations.banners.map(RecommendationBannerResponse::from),
|
||||
originalSeries = recommendations.originalSeries.map(OriginalSeriesResponse::from),
|
||||
latestAudios = recommendations.latestAudios.map(AudioCardResponse::from),
|
||||
newAndHotAudios = recommendations.newAndHotAudios.map(AudioCardResponse::from),
|
||||
freeAudios = recommendations.freeAudios.map(AudioCardResponse::from),
|
||||
pointAudios = recommendations.pointAudios.map(AudioCardResponse::from),
|
||||
mostCommentedAudios = recommendations.mostCommentedAudios.map(CommentedAudioResponse::from),
|
||||
recommendedAudios = recommendations.recommendedAudios.map(AudioCardResponse::from)
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
data class OriginalSeriesResponse(
|
||||
val seriesId: Long,
|
||||
val coverImageUrl: String?
|
||||
) {
|
||||
companion object {
|
||||
fun from(series: OriginalSeries): OriginalSeriesResponse {
|
||||
return OriginalSeriesResponse(series.seriesId, series.coverImageUrl)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
data class AudioCardResponse(
|
||||
val audioContentId: Long,
|
||||
val title: String,
|
||||
val duration: String?,
|
||||
val imageUrl: String?,
|
||||
val price: Int,
|
||||
@JsonProperty("isAdult")
|
||||
val isAdult: Boolean,
|
||||
@JsonProperty("isPointAvailable")
|
||||
val isPointAvailable: Boolean,
|
||||
@JsonProperty("isFirstContent")
|
||||
val isFirstContent: Boolean,
|
||||
@JsonProperty("isOriginalSeries")
|
||||
val isOriginalSeries: Boolean,
|
||||
val creatorNickname: String
|
||||
) {
|
||||
companion object {
|
||||
fun from(audio: AudioCard): AudioCardResponse {
|
||||
return AudioCardResponse(
|
||||
audioContentId = audio.audioContentId,
|
||||
title = audio.title,
|
||||
duration = audio.duration,
|
||||
imageUrl = audio.imageUrl,
|
||||
price = audio.price,
|
||||
isAdult = audio.isAdult,
|
||||
isPointAvailable = audio.isPointAvailable,
|
||||
isFirstContent = audio.isFirstContent,
|
||||
isOriginalSeries = audio.isOriginalSeries,
|
||||
creatorNickname = audio.creatorNickname
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
data class CommentedAudioResponse(
|
||||
val audioContentId: Long,
|
||||
val title: String,
|
||||
val imageUrl: String?,
|
||||
val latestComment: String,
|
||||
val latestCommentWriterProfileImageUrl: String
|
||||
) {
|
||||
companion object {
|
||||
fun from(audio: CommentedAudio): CommentedAudioResponse {
|
||||
return CommentedAudioResponse(
|
||||
audioContentId = audio.audioContentId,
|
||||
title = audio.title,
|
||||
imageUrl = audio.imageUrl,
|
||||
latestComment = audio.latestComment,
|
||||
latestCommentWriterProfileImageUrl = audio.latestCommentWriterProfileImageUrl
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user