From 3410045f834e92b76d5b8d7bb169562e790637b0 Mon Sep 17 00:00:00 2001 From: Klaus Date: Sat, 8 Feb 2025 00:52:39 +0900 Subject: [PATCH] =?UTF-8?q?=EC=BD=98=ED=85=90=EC=B8=A0=20=EB=A9=94?= =?UTF-8?q?=EC=9D=B8=20-=20=EB=8B=A4=EC=8B=9C=EB=B3=B4=EA=B8=B0=20?= =?UTF-8?q?=ED=83=AD=20API?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...AudioContentMainTabLiveReplayController.kt | 22 +++++ .../AudioContentMainTabLiveReplayService.kt | 84 +++++++++++++++++++ .../GetContentMainTabLiveReplayResponse.kt | 16 ++++ 3 files changed, 122 insertions(+) create mode 100644 src/main/kotlin/kr/co/vividnext/sodalive/content/main/tab/replay/AudioContentMainTabLiveReplayController.kt create mode 100644 src/main/kotlin/kr/co/vividnext/sodalive/content/main/tab/replay/AudioContentMainTabLiveReplayService.kt create mode 100644 src/main/kotlin/kr/co/vividnext/sodalive/content/main/tab/replay/GetContentMainTabLiveReplayResponse.kt diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/content/main/tab/replay/AudioContentMainTabLiveReplayController.kt b/src/main/kotlin/kr/co/vividnext/sodalive/content/main/tab/replay/AudioContentMainTabLiveReplayController.kt new file mode 100644 index 0000000..c9b3739 --- /dev/null +++ b/src/main/kotlin/kr/co/vividnext/sodalive/content/main/tab/replay/AudioContentMainTabLiveReplayController.kt @@ -0,0 +1,22 @@ +package kr.co.vividnext.sodalive.content.main.tab.replay + +import kr.co.vividnext.sodalive.common.ApiResponse +import kr.co.vividnext.sodalive.common.SodaException +import kr.co.vividnext.sodalive.member.Member +import org.springframework.security.core.annotation.AuthenticationPrincipal +import org.springframework.web.bind.annotation.GetMapping +import org.springframework.web.bind.annotation.RequestMapping +import org.springframework.web.bind.annotation.RestController + +@RestController +@RequestMapping("/v2/audio-content/main/replay") +class AudioContentMainTabLiveReplayController(private val service: AudioContentMainTabLiveReplayService) { + @GetMapping + fun fetchContentMainTabLiveReplay( + @AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member? + ) = run { + if (member == null) throw SodaException("로그인 정보를 확인해주세요.") + + ApiResponse.ok(service.fetchData(member)) + } +} diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/content/main/tab/replay/AudioContentMainTabLiveReplayService.kt b/src/main/kotlin/kr/co/vividnext/sodalive/content/main/tab/replay/AudioContentMainTabLiveReplayService.kt new file mode 100644 index 0000000..560ca76 --- /dev/null +++ b/src/main/kotlin/kr/co/vividnext/sodalive/content/main/tab/replay/AudioContentMainTabLiveReplayService.kt @@ -0,0 +1,84 @@ +package kr.co.vividnext.sodalive.content.main.tab.replay + +import kr.co.vividnext.sodalive.content.AudioContentRepository +import kr.co.vividnext.sodalive.content.ContentType +import kr.co.vividnext.sodalive.content.main.banner.AudioContentBannerService +import kr.co.vividnext.sodalive.content.main.curation.AudioContentCurationQueryRepository +import kr.co.vividnext.sodalive.content.main.tab.GetContentCurationResponse +import kr.co.vividnext.sodalive.event.EventService +import kr.co.vividnext.sodalive.member.Member +import kr.co.vividnext.sodalive.rank.RankingService +import org.springframework.stereotype.Service +import java.time.DayOfWeek +import java.time.LocalDateTime +import java.time.temporal.TemporalAdjusters + +@Service +class AudioContentMainTabLiveReplayService( + private val bannerService: AudioContentBannerService, + private val contentRepository: AudioContentRepository, + private val rankingService: RankingService, + private val eventService: EventService, + private val curationRepository: AudioContentCurationQueryRepository +) { + fun fetchData(member: Member): GetContentMainTabLiveReplayResponse { + val isAdult = member.auth != null + val memberId = member.id!! + val theme = "다시듣기" + val tabId = 6L + + val contentBannerList = bannerService.getBannerList( + tabId = tabId, + memberId = memberId, + isAdult = isAdult + ) + + val newLiveReplayContentList = contentRepository.findByTheme( + memberId = memberId, + theme = theme, + isAdult = isAdult, + contentType = ContentType.ALL, + limit = 10 + ) + + val currentDateTime = LocalDateTime.now() + val startDate = currentDateTime + .withHour(15) + .withMinute(0) + .withSecond(0) + .minusWeeks(1) + .with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY)) + val endDate = startDate + .plusDays(6) + + val rankLiveReplayContentList = rankingService.getContentRanking( + memberId = memberId, + isAdult = isAdult, + startDate = startDate, + endDate = endDate, + theme = theme + ) + + val eventBannerList = eventService.getEventList(isAdult = isAdult) + + val curationList = curationRepository.findByContentMainTabId(tabId = tabId, isAdult = isAdult) + .map { + GetContentCurationResponse( + title = it.title, + items = contentRepository.findAudioContentByCurationId( + curationId = it.id!!, + isAdult = isAdult, + contentType = ContentType.ALL + ) + ) + } + + return GetContentMainTabLiveReplayResponse( + contentBannerList = contentBannerList, + newLiveReplayContentList = newLiveReplayContentList, + rankLiveReplayContentList = rankLiveReplayContentList, + eventBannerList = eventBannerList, + curationList = curationList + ) + } +} diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/content/main/tab/replay/GetContentMainTabLiveReplayResponse.kt b/src/main/kotlin/kr/co/vividnext/sodalive/content/main/tab/replay/GetContentMainTabLiveReplayResponse.kt new file mode 100644 index 0000000..eea8309 --- /dev/null +++ b/src/main/kotlin/kr/co/vividnext/sodalive/content/main/tab/replay/GetContentMainTabLiveReplayResponse.kt @@ -0,0 +1,16 @@ +package kr.co.vividnext.sodalive.content.main.tab.replay + +import kr.co.vividnext.sodalive.content.main.GetAudioContentMainItem +import kr.co.vividnext.sodalive.content.main.GetAudioContentRankingItem +import kr.co.vividnext.sodalive.content.main.banner.GetAudioContentBannerResponse +import kr.co.vividnext.sodalive.content.main.tab.GetContentCurationResponse +import kr.co.vividnext.sodalive.event.GetEventResponse + +data class GetContentMainTabLiveReplayResponse( + val tabId: Long = 6, + val contentBannerList: List, + val newLiveReplayContentList: List, + val rankLiveReplayContentList: List, + val eventBannerList: GetEventResponse, + val curationList: List +)