diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/live/room/GetLatestFinishedLiveResponse.kt b/src/main/kotlin/kr/co/vividnext/sodalive/live/room/GetLatestFinishedLiveResponse.kt new file mode 100644 index 0000000..57f61cf --- /dev/null +++ b/src/main/kotlin/kr/co/vividnext/sodalive/live/room/GetLatestFinishedLiveResponse.kt @@ -0,0 +1,9 @@ +package kr.co.vividnext.sodalive.live.room + +data class GetLatestFinishedLiveResponse( + val memberId: Long, + val nickname: String, + val profileImageUrl: String, + val title: String, + val timeAgo: String +) diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/live/room/LiveRoomController.kt b/src/main/kotlin/kr/co/vividnext/sodalive/live/room/LiveRoomController.kt index 5389795..c39ed1a 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/live/room/LiveRoomController.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/live/room/LiveRoomController.kt @@ -291,4 +291,7 @@ class LiveRoomController( ApiResponse.ok(service.getHeartList(roomId)) } + + @GetMapping("/latest-finished-live") + fun getLatestFinishedLive() = run { ApiResponse.ok(service.getLatestFinishedLive()) } } diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/live/room/LiveRoomRepository.kt b/src/main/kotlin/kr/co/vividnext/sodalive/live/room/LiveRoomRepository.kt index a648fe2..d92f181 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/live/room/LiveRoomRepository.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/live/room/LiveRoomRepository.kt @@ -60,6 +60,7 @@ interface LiveRoomQueryRepository { fun getTotalHeartCount(roomId: Long): Int? fun getLiveRoomCreatorId(roomId: Long): Long? fun getHeartList(roomId: Long): List + fun getLatestFinishedLive(): List } class LiveRoomQueryRepositoryImpl( @@ -380,4 +381,18 @@ class LiveRoomQueryRepositoryImpl( .orderBy(useCan.can.add(useCan.rewardCan).sum().desc()) .fetch() } + + override fun getLatestFinishedLive(): List { + return queryFactory + .selectFrom(liveRoom) + .innerJoin(liveRoom.member, member) + .where( + liveRoom.isActive.isFalse + .and(liveRoom.channelName.isNotNull) + ) + .groupBy(liveRoom.member.id) + .orderBy(liveRoom.updatedAt.max().desc()) + .limit(20) + .fetch() + } } diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/live/room/LiveRoomService.kt b/src/main/kotlin/kr/co/vividnext/sodalive/live/room/LiveRoomService.kt index fd7e628..e5a88cc 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/live/room/LiveRoomService.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/live/room/LiveRoomService.kt @@ -19,6 +19,7 @@ import kr.co.vividnext.sodalive.can.use.UseCanCalculateStatus import kr.co.vividnext.sodalive.common.SodaException import kr.co.vividnext.sodalive.explorer.ExplorerQueryRepository import kr.co.vividnext.sodalive.extensions.convertLocalDateTime +import kr.co.vividnext.sodalive.extensions.getTimeAgoString import kr.co.vividnext.sodalive.fcm.FcmEvent import kr.co.vividnext.sodalive.fcm.FcmEventType import kr.co.vividnext.sodalive.live.reservation.LiveReservationRepository @@ -1296,4 +1297,17 @@ class LiveRoomService( totalHeart = heartList.sumOf { it.heart } ) } + + fun getLatestFinishedLive(): List { + return repository.getLatestFinishedLive() + .map { + GetLatestFinishedLiveResponse( + memberId = it.member!!.id!!, + nickname = it.member!!.nickname, + profileImageUrl = "$cloudFrontHost/${it.member!!.profileImage}", + title = it.title, + timeAgo = it.updatedAt!!.getTimeAgoString() + ) + } + } }