관리자 콘텐츠 메인 탭 조회 API

This commit is contained in:
Klaus 2025-01-21 16:19:36 +09:00
parent d36aada227
commit 00ce6d6a7a
4 changed files with 50 additions and 1 deletions

View File

@ -42,6 +42,9 @@ class AdminContentController(private val service: AdminContentService) {
fun modifyAudioContent( fun modifyAudioContent(
@RequestBody request: UpdateAdminContentRequest @RequestBody request: UpdateAdminContentRequest
) = ApiResponse.ok(service.updateAudioContent(request)) ) = ApiResponse.ok(service.updateAudioContent(request))
@GetMapping("/main/tab")
fun getContentMainTabList() = ApiResponse.ok(service.getContentMainTabList())
} }
enum class ContentReleaseStatus { enum class ContentReleaseStatus {

View File

@ -1,9 +1,11 @@
package kr.co.vividnext.sodalive.admin.content package kr.co.vividnext.sodalive.admin.content
import kr.co.vividnext.sodalive.admin.content.curation.AdminContentCurationRepository import kr.co.vividnext.sodalive.admin.content.curation.AdminContentCurationRepository
import kr.co.vividnext.sodalive.admin.content.tab.AdminContentMainTabRepository
import kr.co.vividnext.sodalive.admin.content.theme.AdminContentThemeRepository import kr.co.vividnext.sodalive.admin.content.theme.AdminContentThemeRepository
import kr.co.vividnext.sodalive.aws.cloudfront.AudioContentCloudFront import kr.co.vividnext.sodalive.aws.cloudfront.AudioContentCloudFront
import kr.co.vividnext.sodalive.common.SodaException import kr.co.vividnext.sodalive.common.SodaException
import kr.co.vividnext.sodalive.content.main.tab.GetContentMainTabItem
import org.springframework.data.domain.Pageable import org.springframework.data.domain.Pageable
import org.springframework.data.repository.findByIdOrNull import org.springframework.data.repository.findByIdOrNull
import org.springframework.stereotype.Service import org.springframework.stereotype.Service
@ -14,7 +16,8 @@ class AdminContentService(
private val repository: AdminContentRepository, private val repository: AdminContentRepository,
private val themeRepository: AdminContentThemeRepository, private val themeRepository: AdminContentThemeRepository,
private val audioContentCloudFront: AudioContentCloudFront, private val audioContentCloudFront: AudioContentCloudFront,
private val curationRepository: AdminContentCurationRepository private val curationRepository: AdminContentCurationRepository,
private val contentMainTabRepository: AdminContentMainTabRepository
) { ) {
fun getAudioContentList(status: ContentReleaseStatus, pageable: Pageable): GetAdminContentListResponse { fun getAudioContentList(status: ContentReleaseStatus, pageable: Pageable): GetAdminContentListResponse {
val totalCount = repository.getAudioContentTotalCount(status = status) val totalCount = repository.getAudioContentTotalCount(status = status)
@ -118,4 +121,8 @@ class AdminContentService(
audioContent.theme = theme audioContent.theme = theme
} }
} }
fun getContentMainTabList(): List<GetContentMainTabItem> {
return contentMainTabRepository.findAllByActiveIsTrue()
}
} }

View File

@ -0,0 +1,31 @@
package kr.co.vividnext.sodalive.admin.content.tab
import com.querydsl.jpa.impl.JPAQueryFactory
import kr.co.vividnext.sodalive.content.main.tab.AudioContentMainTab
import kr.co.vividnext.sodalive.content.main.tab.GetContentMainTabItem
import kr.co.vividnext.sodalive.content.main.tab.QAudioContentMainTab.audioContentMainTab
import kr.co.vividnext.sodalive.content.main.tab.QGetContentMainTabItem
import org.springframework.data.jpa.repository.JpaRepository
interface AdminContentMainTabRepository : JpaRepository<AudioContentMainTab, Long>, AdminContentMainTabQueryRepository
interface AdminContentMainTabQueryRepository {
fun findAllByActiveIsTrue(): List<GetContentMainTabItem>
}
class AdminContentMainTabQueryRepositoryImpl(
private val queryFactory: JPAQueryFactory
) : AdminContentMainTabQueryRepository {
override fun findAllByActiveIsTrue(): List<GetContentMainTabItem> {
return queryFactory
.select(
QGetContentMainTabItem(
audioContentMainTab.id,
audioContentMainTab.title
)
)
.from(audioContentMainTab)
.where(audioContentMainTab.isActive.isTrue)
.fetch()
}
}

View File

@ -0,0 +1,8 @@
package kr.co.vividnext.sodalive.content.main.tab
import com.querydsl.core.annotations.QueryProjection
data class GetContentMainTabItem @QueryProjection constructor(
val tabId: Long,
val title: String
)