라이브 방 정보 - 방 나가기 로직 @Transactional 추가
This commit is contained in:
		| @@ -223,9 +223,10 @@ class LiveRoomController(private val service: LiveRoomService) { | |||||||
|  |  | ||||||
|     @PostMapping("/quit") |     @PostMapping("/quit") | ||||||
|     fun quitRoom( |     fun quitRoom( | ||||||
|  |         @RequestParam("id") roomId: Long, | ||||||
|         @AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member? |         @AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member? | ||||||
|     ) = run { |     ) = run { | ||||||
|         if (member == null) throw SodaException("로그인 정보를 확인해주세요.") |         if (member == null) throw SodaException("로그인 정보를 확인해주세요.") | ||||||
|         ApiResponse.ok(service.quitRoom(member)) |         ApiResponse.ok(service.quitRoom(roomId, member)) | ||||||
|     } |     } | ||||||
| } | } | ||||||
|   | |||||||
| @@ -865,27 +865,22 @@ class LiveRoomService( | |||||||
|         ) |         ) | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     fun quitRoom(member: Member) { |     @Transactional | ||||||
|         val roomVisit = roomVisitService.getLatestRoomVisit(member.id!!) |     fun quitRoom(roomId: Long, member: Member) { | ||||||
|  |         val room = repository.getLiveRoom(roomId) | ||||||
|         val roomId = roomVisit?.room?.id |         val lock = getOrCreateLock(memberId = member.id!!) | ||||||
|         if (roomId != null) { |         lock.write { | ||||||
|             val lock = getOrCreateLock(memberId = member.id!!) |             val roomInfo = roomInfoRepository.findByIdOrNull(roomId) | ||||||
|             lock.write { |             if (roomInfo != null) { | ||||||
|                 val roomInfo = roomInfoRepository.findByIdOrNull(roomId) |                 if (room?.member != null && room.member!! == member) { | ||||||
|                 if (roomInfo != null) { |                     room.isActive = false | ||||||
|                     val room = repository.getLiveRoom(roomId) ?: return |                     kickOutService.deleteKickOutData(roomId = room.id!!) | ||||||
|                     println(room) |                     roomInfoRepository.deleteById(roomInfo.roomId) | ||||||
|                     if (room.member != null && room.member!!.id!! == member.id!!) { |                 } else { | ||||||
|                         room.isActive = false |                     roomInfo.removeSpeaker(member) | ||||||
|                         kickOutService.deleteKickOutData(roomId = room.id!!) |                     roomInfo.removeListener(member) | ||||||
|                         roomInfoRepository.deleteById(roomInfo.roomId) |                     roomInfo.removeManager(member) | ||||||
|                     } else { |                     roomInfoRepository.save(roomInfo) | ||||||
|                         roomInfo.removeSpeaker(member) |  | ||||||
|                         roomInfo.removeListener(member) |  | ||||||
|                         roomInfo.removeManager(member) |  | ||||||
|                         roomInfoRepository.save(roomInfo) |  | ||||||
|                     } |  | ||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|   | |||||||
| @@ -13,7 +13,6 @@ interface LiveRoomVisitRepository : JpaRepository<LiveRoomVisit, Long>, LiveRoom | |||||||
| interface LiveRoomVisitQueryRepository { | interface LiveRoomVisitQueryRepository { | ||||||
|     fun findByRoomIdAndMemberId(roomId: Long, memberId: Long): LiveRoomVisit? |     fun findByRoomIdAndMemberId(roomId: Long, memberId: Long): LiveRoomVisit? | ||||||
|     fun findFirstByMemberIdOrderByUpdatedAtDesc(memberId: Long): LiveRoomVisit? |     fun findFirstByMemberIdOrderByUpdatedAtDesc(memberId: Long): LiveRoomVisit? | ||||||
|     fun getLatestRoomVisit(memberId: Long): LiveRoomVisit? |  | ||||||
| } | } | ||||||
|  |  | ||||||
| @Repository | @Repository | ||||||
| @@ -39,13 +38,4 @@ class LiveRoomVisitQueryRepositoryImpl(private val queryFactory: JPAQueryFactory | |||||||
|             .orderBy(liveRoomVisit.updatedAt.desc()) |             .orderBy(liveRoomVisit.updatedAt.desc()) | ||||||
|             .fetchFirst() |             .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() |  | ||||||
|     } |  | ||||||
| } | } | ||||||
|   | |||||||
| @@ -22,8 +22,4 @@ class LiveRoomVisitService(private val repository: LiveRoomVisitRepository) { | |||||||
|  |  | ||||||
|         repository.save(roomVisit) |         repository.save(roomVisit) | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     fun getLatestRoomVisit(memberId: Long): LiveRoomVisit? { |  | ||||||
|         return repository.getLatestRoomVisit(memberId) |  | ||||||
|     } |  | ||||||
| } | } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user