From a849d00c7f865a9ec33bfcf6dc547ac7a64dacc5 Mon Sep 17 00:00:00 2001 From: Klaus Date: Fri, 18 Jul 2025 15:46:20 +0900 Subject: [PATCH] =?UTF-8?q?fix:=20=EC=B5=9C=EA=B7=BC=20=EC=A2=85=EB=A3=8C?= =?UTF-8?q?=ED=95=9C=20=EB=9D=BC=EC=9D=B4=EB=B8=8C=20API=20=EC=98=A4?= =?UTF-8?q?=EB=A5=98=20=EC=88=98=EC=A0=95=20-=20SQLSyntaxErrorException=20?= =?UTF-8?q?=EC=98=A4=EB=A5=98=EC=88=98=EC=A0=95=20-=20select=20=EA=B0=92?= =?UTF-8?q?=EC=97=90=20=EC=A7=91=EA=B3=84=EC=BF=BC=EB=A6=AC=EB=A5=BC=20?= =?UTF-8?q?=EB=84=A3=EC=96=B4=EC=84=9C=20=ED=95=B4=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../room/GetLatestFinishedLiveResponse.kt | 22 ++++++++++++++++++- .../sodalive/live/room/LiveRoomRepository.kt | 14 +++++++++--- .../sodalive/live/room/LiveRoomService.kt | 11 ++-------- 3 files changed, 34 insertions(+), 13 deletions(-) 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 index 57f61cf..8955da6 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/live/room/GetLatestFinishedLiveResponse.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/live/room/GetLatestFinishedLiveResponse.kt @@ -1,9 +1,29 @@ package kr.co.vividnext.sodalive.live.room +import com.querydsl.core.annotations.QueryProjection +import kr.co.vividnext.sodalive.extensions.getTimeAgoString +import java.time.LocalDateTime + +data class GetLatestFinishedLiveQueryResponse @QueryProjection constructor( + val memberId: Long, + val nickname: String, + val profileImageUrl: String, + val title: String, + val updatedAt: LocalDateTime +) + data class GetLatestFinishedLiveResponse( val memberId: Long, val nickname: String, val profileImageUrl: String, val title: String, val timeAgo: String -) +) { + constructor(response: GetLatestFinishedLiveQueryResponse) : this( + response.memberId, + response.nickname, + response.profileImageUrl, + response.title, + response.updatedAt.getTimeAgoString() + ) +} 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 905fd26..6480b0a 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,7 +60,7 @@ interface LiveRoomQueryRepository { fun getTotalHeartCount(roomId: Long): Int? fun getLiveRoomCreatorId(roomId: Long): Long? fun getHeartList(roomId: Long): List - fun getLatestFinishedLive(offset: Long): List + fun getLatestFinishedLive(offset: Long): List } class LiveRoomQueryRepositoryImpl( @@ -382,9 +382,17 @@ class LiveRoomQueryRepositoryImpl( .fetch() } - override fun getLatestFinishedLive(offset: Long): List { + override fun getLatestFinishedLive(offset: Long): List { return queryFactory - .selectFrom(liveRoom) + .select( + QGetLatestFinishedLiveQueryResponse( + member.id, + member.nickname, + member.profileImage.prepend("/").prepend(cloudFrontHost), + liveRoom.title, + liveRoom.updatedAt.max() + ) + ) .innerJoin(liveRoom.member, member) .where( liveRoom.isActive.isFalse 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 bae8f86..766d41f 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,7 +19,6 @@ 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 @@ -1307,19 +1306,13 @@ class LiveRoomService( repository.getLatestFinishedLive(offset = retry) .filter { if (member?.id != null) { - !blockMemberRepository.isBlocked(blockedMemberId = member.id!!, memberId = it.member!!.id!!) + !blockMemberRepository.isBlocked(blockedMemberId = member.id!!, memberId = it.memberId) } else { true } } .map { - GetLatestFinishedLiveResponse( - memberId = it.member!!.id!!, - nickname = it.member!!.nickname, - profileImageUrl = "$cloudFrontHost/${it.member!!.profileImage}", - title = it.title, - timeAgo = it.updatedAt!!.getTimeAgoString() - ) + GetLatestFinishedLiveResponse(response = it) } ) } while (result.size < 20 && retry++ < 3)