Compare commits

..

No commits in common. "2b914fd222e453b3b4b0b31361fb2ba8cff379b5" and "109e42a5a317c5859576cba004edf67e21a1e2fc" have entirely different histories.

9 changed files with 27 additions and 105 deletions

View File

@ -16,7 +16,6 @@ import kr.co.vividnext.sodalive.common.SodaException
import kr.co.vividnext.sodalive.content.AudioContent
import kr.co.vividnext.sodalive.content.order.Order
import kr.co.vividnext.sodalive.live.room.LiveRoom
import kr.co.vividnext.sodalive.member.Member
import kr.co.vividnext.sodalive.member.MemberRepository
import org.springframework.data.repository.findByIdOrNull
import org.springframework.stereotype.Service
@ -42,9 +41,9 @@ class CanPaymentService(
) {
val member = memberRepository.findByIdOrNull(id = memberId)
?: throw SodaException("잘못된 요청입니다.\n다시 시도해 주세요.")
val useRewardCan = spendRewardCan(member, needCan, container)
val useRewardCan = spendRewardCan(memberId, needCan, container)
val useChargeCan = if (needCan - useRewardCan.total > 0) {
spendChargeCan(member, needCan = needCan - useRewardCan.total, container = container)
spendChargeCan(memberId, needCan = needCan - useRewardCan.total, container = container)
} else {
null
}
@ -144,19 +143,19 @@ class CanPaymentService(
}
}
private fun spendRewardCan(member: Member, needCan: Int, container: String): TotalSpentCan {
private fun spendRewardCan(memberId: Long, needCan: Int, container: String): TotalSpentCan {
return if (needCan > 0) {
val member = memberRepository.findByIdOrNull(id = memberId)
?: throw SodaException("잘못된 요청입니다.\n다시 시도해 주세요.")
val spentCans = mutableListOf<SpentCan>()
var chargeId = 0L
var total = 0
while (needCan - total > 0) {
val remainingNeedCan = needCan - total
val charge = chargeRepository.getOldestChargeWhereRewardCanGreaterThan0(
chargeId,
member.id!!,
container
) ?: break
val charge = chargeRepository.getOldestChargeWhereRewardCanGreaterThan0(chargeId, memberId, container)
?: break
if (charge.rewardCan >= remainingNeedCan) {
charge.rewardCan -= remainingNeedCan
@ -185,9 +184,9 @@ class CanPaymentService(
)
when (charge.payment!!.paymentGateway) {
PaymentGateway.PG -> member.pgRewardCan -= charge.rewardCan
PaymentGateway.APPLE_IAP -> member.appleRewardCan -= charge.rewardCan
PaymentGateway.GOOGLE_IAP -> member.googleRewardCan -= charge.rewardCan
PaymentGateway.PG -> member.pgRewardCan -= remainingNeedCan
PaymentGateway.APPLE_IAP -> member.appleRewardCan -= remainingNeedCan
PaymentGateway.GOOGLE_IAP -> member.googleRewardCan -= remainingNeedCan
}
charge.rewardCan = 0
@ -202,19 +201,19 @@ class CanPaymentService(
}
}
private fun spendChargeCan(member: Member, needCan: Int, container: String): TotalSpentCan {
private fun spendChargeCan(memberId: Long, needCan: Int, container: String): TotalSpentCan {
return if (needCan > 0) {
val member = memberRepository.findByIdOrNull(id = memberId)
?: throw SodaException("잘못된 요청입니다.\n다시 시도해 주세요.")
val spentCans = mutableListOf<SpentCan>()
var chargeId = 0L
var total = 0
while (needCan - total > 0) {
val remainingNeedCan = needCan - total
val charge = chargeRepository.getOldestChargeWhereChargeCanGreaterThan0(
chargeId,
member.id!!,
container
) ?: break
val charge = chargeRepository.getOldestChargeWhereChargeCanGreaterThan0(chargeId, memberId, container)
?: break
if (charge.chargeCan >= remainingNeedCan) {
charge.chargeCan -= remainingNeedCan
@ -243,9 +242,9 @@ class CanPaymentService(
)
when (charge.payment!!.paymentGateway) {
PaymentGateway.PG -> member.pgChargeCan -= charge.chargeCan
PaymentGateway.APPLE_IAP -> member.appleChargeCan -= charge.chargeCan
PaymentGateway.GOOGLE_IAP -> member.pgChargeCan -= charge.chargeCan
PaymentGateway.PG -> member.pgChargeCan -= remainingNeedCan
PaymentGateway.APPLE_IAP -> member.appleChargeCan -= remainingNeedCan
PaymentGateway.GOOGLE_IAP -> member.pgChargeCan -= remainingNeedCan
}
charge.chargeCan = 0

View File

@ -14,7 +14,7 @@ class SodaExceptionHandler {
private val logger = LoggerFactory.getLogger(this::class.java)
@ExceptionHandler(SodaException::class)
fun handleSodaException(e: SodaException) = run {
fun handleSudaException(e: SodaException) = run {
logger.error("API error", e)
ApiResponse.error(
message = e.message,

View File

@ -9,8 +9,7 @@ import org.springframework.transaction.annotation.Transactional
import org.springframework.transaction.event.TransactionalEventListener
enum class FcmEventType {
ALL, INDIVIDUAL, CREATE_LIVE, START_LIVE, CANCEL_LIVE, UPLOAD_CONTENT, SEND_MESSAGE, CHANGE_NOTICE,
CREATE_CONTENT_COMMENT
ALL, INDIVIDUAL, CREATE_LIVE, START_LIVE, UPLOAD_CONTENT, SEND_MESSAGE, CHANGE_NOTICE, CREATE_CONTENT_COMMENT
}
class FcmEvent(
@ -19,7 +18,6 @@ class FcmEvent(
val message: String,
val container: String = "",
val recipients: List<Long> = listOf(),
val recipientsMap: Map<String, List<List<String>>>? = null,
val isAuth: Boolean = false,
val roomId: Long? = null,
val contentId: Long? = null,
@ -133,34 +131,6 @@ class FcmSendListener(
}
}
FcmEventType.CANCEL_LIVE -> {
if (fcmEvent.recipientsMap != null) {
val iosPushTokens = fcmEvent.recipientsMap["ios"]
val aosPushToken = fcmEvent.recipientsMap["aos"]
if (iosPushTokens != null) {
for (tokens in iosPushTokens) {
pushService.send(
tokens = tokens,
title = fcmEvent.title,
message = fcmEvent.message,
container = "ios"
)
}
}
if (aosPushToken != null) {
for (tokens in aosPushToken) {
pushService.send(
tokens = tokens,
title = fcmEvent.title,
message = fcmEvent.message,
container = "aos"
)
}
}
}
}
FcmEventType.UPLOAD_CONTENT -> {
if (fcmEvent.container.isNotBlank()) {
val pushTokens = memberRepository.getUploadContentNotificationRecipientPushTokens(

View File

@ -113,9 +113,6 @@ class LiveRecommendRepository(
.orderBy(Expressions.numberTemplate(Double::class.java, "function('rand')").asc())
.limit(limit)
.fetch()
.asSequence()
.filter { !isBlocked(it.creatorId) }
.toList()
}
fun getOnAirFollowingChannelList(
@ -191,9 +188,6 @@ class LiveRecommendRepository(
.orderBy(Expressions.numberTemplate(Double::class.java, "function('rand')").asc())
.limit(limit)
.fetch()
.asSequence()
.filter { !isBlocked(it.creatorId) }
.toList()
}
fun getCreatorFollowingAllListTotalCount(memberId: Long, isBlocked: (Long) -> Boolean): Int {

View File

@ -82,8 +82,7 @@ class LiveReservationQueryRepositoryImpl(private val queryFactory: JPAQueryFacto
.innerJoin(liveReservation.member, member)
.innerJoin(liveReservation.room, liveRoom)
.where(
liveRoom.isActive.isTrue
.and(liveReservation.isActive.eq(active))
liveReservation.isActive.eq(active)
.and(member.id.eq(memberId))
)
.fetch()

View File

@ -1,6 +1,6 @@
package kr.co.vividnext.sodalive.live.room
data class CreateLiveRoomRequest(
data class CreateSudaRoomRequest(
val title: String,
val content: String,
val coverImageUrl: String? = null,

View File

@ -161,7 +161,7 @@ class LiveRoomService(
@Transactional
fun createLiveRoom(coverImage: MultipartFile?, requestString: String, member: Member): CreateLiveRoomResponse {
val request = objectMapper.readValue(requestString, CreateLiveRoomRequest::class.java)
val request = objectMapper.readValue(requestString, CreateSudaRoomRequest::class.java)
if (request.coverImageUrl == null && coverImage == null) {
throw SodaException("커버이미지를 선택해 주세요.")
}
@ -474,17 +474,7 @@ class LiveRoomService(
}
}
val pushTokenListMap = memberRepository.getPushTokenFromReservationList(request.roomId)
reservationRepository.cancelReservation(roomId = room.id!!)
applicationEventPublisher.publishEvent(
FcmEvent(
type = FcmEventType.CANCEL_LIVE,
title = room.member!!.nickname,
message = "라이브 취소 : ${room.title}",
recipientsMap = pushTokenListMap
)
)
}
@Transactional
@ -604,7 +594,7 @@ class LiveRoomService(
val coverImagePath = s3Uploader.upload(
inputStream = coverImage.inputStream,
bucket = coverImageBucket,
filePath = "live_room_cover/${room.id}/$coverImageFileName",
filePath = "suda_room_cover/${room.id}/$coverImageFileName",
metadata = metadata
)

View File

@ -50,7 +50,6 @@ interface MemberQueryRepository {
fun getMemberByEmail(email: String): Member?
fun getChangeNoticeRecipientPushTokens(creatorId: Long): Map<String, List<List<String>>>
fun getPushTokenFromReservationList(roomId: Long): Map<String, List<List<String>>>
}
@Repository
@ -256,11 +255,9 @@ class MemberQueryRepositoryImpl(
)
.from(message)
.innerJoin(message.recipient, member)
.innerJoin(member.notification, memberNotification)
.where(
message.id.eq(messageId)
.and(member.pushToken.isNotNull)
.and(memberNotification.message.isTrue)
)
.fetchFirst()
}
@ -359,31 +356,4 @@ class MemberQueryRepositoryImpl(
return mapOf("aos" to aosPushTokens, "ios" to iosPushTokens)
}
override fun getPushTokenFromReservationList(roomId: Long): Map<String, List<List<String>>> {
val where = liveRoom.id.eq(roomId)
.and(liveReservation.isActive.isTrue)
val aosPushTokens = queryFactory
.select(liveReservation.member.pushToken)
.from(liveReservation)
.innerJoin(liveReservation.room, liveRoom)
.innerJoin(liveReservation.member, member)
.where(where.and(member.container.eq("aos")))
.fetch()
.toSet()
.chunked(500)
val iosPushTokens = queryFactory
.select(liveReservation.member.pushToken)
.from(liveReservation)
.innerJoin(liveReservation.room, liveRoom)
.innerJoin(liveReservation.member, member)
.where(where.and(member.container.eq("ios")))
.fetch()
.toSet()
.chunked(500)
return mapOf("aos" to aosPushTokens, "ios" to iosPushTokens)
}
}

View File

@ -376,7 +376,7 @@ class MemberService(
)
if (blockMember != null) {
blockMember.isActive = false
blockMember.isActive = true
}
}