From 7671e24470e404ba107a02d6e4d8dfc6f6d7f7a9 Mon Sep 17 00:00:00 2001 From: Klaus Date: Tue, 1 Aug 2023 05:39:14 +0900 Subject: [PATCH] =?UTF-8?q?=EB=9D=BC=EC=9D=B4=EB=B8=8C=20=EB=B0=A9=20-=20?= =?UTF-8?q?=EB=9D=BC=EC=9D=B4=EB=B8=8C=20=EB=82=98=EA=B0=80=EA=B8=B0=20?= =?UTF-8?q?=EB=A1=9C=EC=A7=81=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sodalive/live/room/LiveRoomController.kt | 3 +- .../sodalive/live/room/LiveRoomService.kt | 31 +++++++++++-------- .../room/visit/LiveRoomVisitRepository.kt | 10 ++++++ .../live/room/visit/LiveRoomVisitService.kt | 4 +++ 4 files changed, 33 insertions(+), 15 deletions(-) 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 4f7fd58..994a7cb 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 @@ -223,10 +223,9 @@ class LiveRoomController(private val service: LiveRoomService) { @PostMapping("/quit") fun quitRoom( - @RequestParam("id") roomId: Long, @AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member? ) = run { if (member == null) throw SodaException("로그인 정보를 확인해주세요.") - ApiResponse.ok(service.quitRoom(roomId, member)) + ApiResponse.ok(service.quitRoom(member)) } } 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 62e6967..9761c77 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 @@ -843,19 +843,24 @@ class LiveRoomService( ) } - fun quitRoom(roomId: Long, member: Member) { - val room = repository.getLiveRoom(roomId) - val roomInfo = roomInfoRepository.findByIdOrNull(roomId) - if (roomInfo != null) { - if (room?.member != null && room.member!! == member) { - room.isActive = false - kickOutService.deleteKickOutData(roomId = room.id!!) - roomInfoRepository.deleteById(roomInfo.roomId) - } else { - roomInfo.removeSpeaker(member) - roomInfo.removeListener(member) - roomInfo.removeManager(member) - roomInfoRepository.save(roomInfo) + fun quitRoom(member: Member) { + val roomVisit = roomVisitService.getLatestRoomVisit(member.id!!) + + val roomId = roomVisit?.room?.id + if (roomId != null) { + val roomInfo = roomInfoRepository.findByIdOrNull(roomId) + if (roomInfo != null) { + val room = repository.getLiveRoom(roomId) ?: return + if (room.member != null && room.member!! == member) { + room.isActive = false + kickOutService.deleteKickOutData(roomId = room.id!!) + roomInfoRepository.deleteById(roomInfo.roomId) + } else { + roomInfo.removeSpeaker(member) + roomInfo.removeListener(member) + roomInfo.removeManager(member) + roomInfoRepository.save(roomInfo) + } } } } diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/live/room/visit/LiveRoomVisitRepository.kt b/src/main/kotlin/kr/co/vividnext/sodalive/live/room/visit/LiveRoomVisitRepository.kt index b90ce96..2eed38f 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/live/room/visit/LiveRoomVisitRepository.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/live/room/visit/LiveRoomVisitRepository.kt @@ -13,6 +13,7 @@ interface LiveRoomVisitRepository : JpaRepository, LiveRoom interface LiveRoomVisitQueryRepository { fun findByRoomIdAndMemberId(roomId: Long, memberId: Long): LiveRoomVisit? fun findFirstByMemberIdOrderByUpdatedAtDesc(memberId: Long): LiveRoomVisit? + fun getLatestRoomVisit(memberId: Long): LiveRoomVisit? } @Repository @@ -38,4 +39,13 @@ class LiveRoomVisitQueryRepositoryImpl(private val queryFactory: JPAQueryFactory .orderBy(liveRoomVisit.updatedAt.desc()) .fetchFirst() } + + override fun getLatestRoomVisit(memberId: Long): LiveRoomVisit? { + return queryFactory + .selectFrom(liveRoomVisit) + .innerJoin(liveRoomVisit.member, member) + .where(member.id.eq(memberId)) + .orderBy(liveRoomVisit.updatedAt.desc()) + .fetchFirst() + } } diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/live/room/visit/LiveRoomVisitService.kt b/src/main/kotlin/kr/co/vividnext/sodalive/live/room/visit/LiveRoomVisitService.kt index df18ba1..a0cda13 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/live/room/visit/LiveRoomVisitService.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/live/room/visit/LiveRoomVisitService.kt @@ -22,4 +22,8 @@ class LiveRoomVisitService(private val repository: LiveRoomVisitRepository) { repository.save(roomVisit) } + + fun getLatestRoomVisit(memberId: Long): LiveRoomVisit? { + return repository.getLatestRoomVisit(memberId) + } }