From 7696f06fbd60277a9efb5ad704ada810067aad7c Mon Sep 17 00:00:00 2001 From: Klaus <klaus@vividnext.co.kr> Date: Sun, 6 Aug 2023 22:50:57 +0900 Subject: [PATCH] =?UTF-8?q?=EA=B4=80=EB=A6=AC=EC=9E=90=20-=20=EB=9D=BC?= =?UTF-8?q?=EC=9D=B4=EB=B8=8C=20=EB=A6=AC=EC=8A=A4=ED=8A=B8=20API?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/live/AdminLiveController.kt | 15 ++++++++ .../live/AdminLiveRoomQueryRepository.kt | 19 ++++++++++ .../sodalive/admin/live/AdminLiveService.kt | 37 +++++++++++++++++++ .../sodalive/admin/live/GetLiveResponse.kt | 19 ++++++++++ 4 files changed, 90 insertions(+) create mode 100644 src/main/kotlin/kr/co/vividnext/sodalive/admin/live/AdminLiveController.kt create mode 100644 src/main/kotlin/kr/co/vividnext/sodalive/admin/live/AdminLiveRoomQueryRepository.kt create mode 100644 src/main/kotlin/kr/co/vividnext/sodalive/admin/live/AdminLiveService.kt create mode 100644 src/main/kotlin/kr/co/vividnext/sodalive/admin/live/GetLiveResponse.kt diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/admin/live/AdminLiveController.kt b/src/main/kotlin/kr/co/vividnext/sodalive/admin/live/AdminLiveController.kt new file mode 100644 index 0000000..a4f7224 --- /dev/null +++ b/src/main/kotlin/kr/co/vividnext/sodalive/admin/live/AdminLiveController.kt @@ -0,0 +1,15 @@ +package kr.co.vividnext.sodalive.admin.live + +import kr.co.vividnext.sodalive.common.ApiResponse +import org.springframework.security.access.prepost.PreAuthorize +import org.springframework.web.bind.annotation.GetMapping +import org.springframework.web.bind.annotation.RequestMapping +import org.springframework.web.bind.annotation.RestController + +@RestController +@PreAuthorize("hasRole('ADMIN')") +@RequestMapping("/admin/live") +class AdminLiveController(private val service: AdminLiveService) { + @GetMapping + fun getOnAirLive() = ApiResponse.ok(data = service.getLiveList()) +} diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/admin/live/AdminLiveRoomQueryRepository.kt b/src/main/kotlin/kr/co/vividnext/sodalive/admin/live/AdminLiveRoomQueryRepository.kt new file mode 100644 index 0000000..a7f081b --- /dev/null +++ b/src/main/kotlin/kr/co/vividnext/sodalive/admin/live/AdminLiveRoomQueryRepository.kt @@ -0,0 +1,19 @@ +package kr.co.vividnext.sodalive.admin.live + +import com.querydsl.jpa.impl.JPAQueryFactory +import kr.co.vividnext.sodalive.live.room.LiveRoom +import kr.co.vividnext.sodalive.live.room.QLiveRoom.liveRoom +import kr.co.vividnext.sodalive.member.QMember.member +import org.springframework.stereotype.Repository + +@Repository +class AdminLiveRoomQueryRepository(private val queryFactory: JPAQueryFactory) { + fun getLiveRoomList(): List<LiveRoom> { + return queryFactory + .selectFrom(liveRoom) + .innerJoin(liveRoom.member, member) + .where(liveRoom.isActive.isTrue) + .orderBy(liveRoom.channelName.desc(), liveRoom.beginDateTime.asc()) + .fetch() + } +} diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/admin/live/AdminLiveService.kt b/src/main/kotlin/kr/co/vividnext/sodalive/admin/live/AdminLiveService.kt new file mode 100644 index 0000000..bec8b06 --- /dev/null +++ b/src/main/kotlin/kr/co/vividnext/sodalive/admin/live/AdminLiveService.kt @@ -0,0 +1,37 @@ +package kr.co.vividnext.sodalive.admin.live + +import org.springframework.beans.factory.annotation.Value +import org.springframework.stereotype.Service + +@Service +class AdminLiveService( + private val repository: AdminLiveRoomQueryRepository, + + @Value("\${cloud.aws.cloud-front.host}") + private val coverImageHost: String +) { + fun getLiveList(): GetLiveResponse { + return GetLiveResponse( + liveList = repository.getLiveRoomList() + .asSequence() + .map { + GetLiveResponseItem( + id = it.id!!, + title = it.title, + content = it.notice, + managerNickname = it.member!!.nickname, + coverImageUrl = if (it.coverImage!!.startsWith("https://")) { + it.coverImage!! + } else { + "$coverImageHost/${it.coverImage!!}" + }, + channelName = it.channelName ?: "", + type = it.type, + password = it.password, + isAdult = it.isAdult + ) + } + .toList() + ) + } +} diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/admin/live/GetLiveResponse.kt b/src/main/kotlin/kr/co/vividnext/sodalive/admin/live/GetLiveResponse.kt new file mode 100644 index 0000000..b0f76fc --- /dev/null +++ b/src/main/kotlin/kr/co/vividnext/sodalive/admin/live/GetLiveResponse.kt @@ -0,0 +1,19 @@ +package kr.co.vividnext.sodalive.admin.live + +import kr.co.vividnext.sodalive.live.room.LiveRoomType + +data class GetLiveResponse( + val liveList: List<GetLiveResponseItem> +) + +data class GetLiveResponseItem( + val id: Long, + val title: String, + val content: String, + val managerNickname: String, + val coverImageUrl: String, + val channelName: String, + val type: LiveRoomType, + val password: String?, + val isAdult: Boolean +)