라이브 방
- 하트 후원 기능 추가
This commit is contained in:
		| @@ -53,7 +53,7 @@ class CanService(private val repository: CanRepository) { | ||||
|             } | ||||
|             .map { | ||||
|                 val title: String = when (it.canUsage) { | ||||
|                     CanUsage.DONATION, CanUsage.SPIN_ROULETTE -> { | ||||
|                     CanUsage.HEART, CanUsage.DONATION, CanUsage.SPIN_ROULETTE -> { | ||||
|                         if (it.room != null) { | ||||
|                             "[라이브 후원] ${it.room!!.member!!.nickname}" | ||||
|                         } else if (it.audioContent != null) { | ||||
|   | ||||
| @@ -2,6 +2,7 @@ package kr.co.vividnext.sodalive.can.use | ||||
|  | ||||
| enum class CanUsage { | ||||
|     LIVE, | ||||
|     HEART, | ||||
|     DONATION, | ||||
|     CHANGE_NICKNAME, | ||||
|     ORDER_CONTENT, | ||||
|   | ||||
| @@ -5,6 +5,7 @@ import kr.co.vividnext.sodalive.common.SodaException | ||||
| import kr.co.vividnext.sodalive.live.room.cancel.CancelLiveRequest | ||||
| import kr.co.vividnext.sodalive.live.room.donation.DeleteLiveRoomDonationMessage | ||||
| import kr.co.vividnext.sodalive.live.room.donation.LiveRoomDonationRequest | ||||
| import kr.co.vividnext.sodalive.live.room.like.LiveRoomLikeHeartRequest | ||||
| import kr.co.vividnext.sodalive.live.room.visit.LiveRoomVisitService | ||||
| import kr.co.vividnext.sodalive.member.Member | ||||
| import org.springframework.data.domain.Pageable | ||||
| @@ -262,4 +263,14 @@ class LiveRoomController( | ||||
|  | ||||
|         ApiResponse.ok(visitService.getRecentVisitRoomUsers(member)) | ||||
|     } | ||||
|  | ||||
|     @PostMapping("/like-heart") | ||||
|     fun likeHeart( | ||||
|         @RequestBody request: LiveRoomLikeHeartRequest, | ||||
|         @AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member? | ||||
|     ) = run { | ||||
|         if (member == null) throw SodaException("로그인 정보를 확인해주세요.") | ||||
|  | ||||
|         ApiResponse.ok(service.likeHeart(request, member)) | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -39,6 +39,7 @@ import kr.co.vividnext.sodalive.live.room.info.LiveRoomInfo | ||||
| import kr.co.vividnext.sodalive.live.room.info.LiveRoomInfoRedisRepository | ||||
| import kr.co.vividnext.sodalive.live.room.info.LiveRoomMember | ||||
| import kr.co.vividnext.sodalive.live.room.kickout.LiveRoomKickOutService | ||||
| import kr.co.vividnext.sodalive.live.room.like.LiveRoomLikeHeartRequest | ||||
| import kr.co.vividnext.sodalive.live.room.menu.CreateLiveMenuRequest | ||||
| import kr.co.vividnext.sodalive.live.room.menu.LiveRoomMenuService | ||||
| import kr.co.vividnext.sodalive.live.room.menu.UpdateLiveMenuRequest | ||||
| @@ -1221,4 +1222,25 @@ class LiveRoomService( | ||||
|     private fun getOrCreateLock(memberId: Long): ReentrantReadWriteLock { | ||||
|         return tokenLocks.computeIfAbsent(memberId) { ReentrantReadWriteLock() } | ||||
|     } | ||||
|  | ||||
|     @Transactional | ||||
|     fun likeHeart(request: LiveRoomLikeHeartRequest, member: Member) { | ||||
|         val room = repository.findByIdOrNull(request.roomId) | ||||
|             ?: throw SodaException("해당하는 라이브가 없습니다.") | ||||
|  | ||||
|         val host = room.member ?: throw SodaException("잘못된 요청입니다.") | ||||
|  | ||||
|         if (host.role != MemberRole.CREATOR) { | ||||
|             throw SodaException("비비드넥스트와 계약한\n크리에이터에게만 후원을 하실 수 있습니다.") | ||||
|         } | ||||
|  | ||||
|         canPaymentService.spendCan( | ||||
|             memberId = member.id!!, | ||||
|             needCan = 1, | ||||
|             canUsage = CanUsage.HEART, | ||||
|             isSecret = false, | ||||
|             liveRoom = room, | ||||
|             container = request.container | ||||
|         ) | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -0,0 +1,6 @@ | ||||
| package kr.co.vividnext.sodalive.live.room.like | ||||
|  | ||||
| data class LiveRoomLikeHeartRequest( | ||||
|     val roomId: Long, | ||||
|     val container: String | ||||
| ) | ||||
		Reference in New Issue
	
	Block a user