라이브 방 정보 - 방 나가기 로직 @Transactional 추가

This commit is contained in:
Klaus 2023-08-01 06:32:21 +09:00
parent 7d904067fe
commit df861bf8a1
4 changed files with 18 additions and 36 deletions

View File

@ -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))
} }
} }

View File

@ -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)
}
} }
} }
} }

View File

@ -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()
}
} }

View File

@ -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)
}
} }