라이브 - 시작, 취소, 입장, 수정, 예약 API 추가
This commit is contained in:
@@ -1,7 +1,78 @@
|
||||
package kr.co.vividnext.sodalive.can.charge
|
||||
|
||||
import com.querydsl.core.types.dsl.BooleanExpression
|
||||
import com.querydsl.jpa.impl.JPAQueryFactory
|
||||
import kr.co.vividnext.sodalive.can.charge.QCharge.charge
|
||||
import kr.co.vividnext.sodalive.can.payment.PaymentGateway
|
||||
import kr.co.vividnext.sodalive.can.payment.PaymentStatus
|
||||
import kr.co.vividnext.sodalive.can.payment.QPayment.payment
|
||||
import kr.co.vividnext.sodalive.member.QMember.member
|
||||
import org.springframework.data.jpa.repository.JpaRepository
|
||||
import org.springframework.stereotype.Repository
|
||||
|
||||
@Repository
|
||||
interface ChargeRepository : JpaRepository<Charge, Long>
|
||||
interface ChargeRepository : JpaRepository<Charge, Long>, ChargeQueryRepository
|
||||
|
||||
interface ChargeQueryRepository {
|
||||
fun getOldestChargeWhereRewardCanGreaterThan0(chargeId: Long, memberId: Long, container: String): Charge?
|
||||
fun getOldestChargeWhereChargeCanGreaterThan0(chargeId: Long, memberId: Long, container: String): Charge?
|
||||
}
|
||||
|
||||
class ChargeQueryRepositoryImpl(private val queryFactory: JPAQueryFactory) : ChargeQueryRepository {
|
||||
override fun getOldestChargeWhereRewardCanGreaterThan0(
|
||||
chargeId: Long,
|
||||
memberId: Long,
|
||||
container: String
|
||||
): Charge? {
|
||||
return queryFactory
|
||||
.selectFrom(charge)
|
||||
.innerJoin(charge.member, member)
|
||||
.leftJoin(charge.payment, payment)
|
||||
.where(
|
||||
member.id.eq(memberId)
|
||||
.and(charge.rewardCan.gt(0))
|
||||
.and(charge.id.gt(chargeId))
|
||||
.and(payment.status.eq(PaymentStatus.COMPLETE))
|
||||
.and(getPaymentGatewayCondition(container))
|
||||
)
|
||||
.orderBy(charge.id.asc())
|
||||
.fetchFirst()
|
||||
}
|
||||
|
||||
override fun getOldestChargeWhereChargeCanGreaterThan0(
|
||||
chargeId: Long,
|
||||
memberId: Long,
|
||||
container: String
|
||||
): Charge? {
|
||||
return queryFactory
|
||||
.selectFrom(charge)
|
||||
.innerJoin(charge.member, member)
|
||||
.leftJoin(charge.payment, payment)
|
||||
.where(
|
||||
member.id.eq(memberId)
|
||||
.and(charge.chargeCan.gt(0))
|
||||
.and(charge.id.gt(chargeId))
|
||||
.and(payment.status.eq(PaymentStatus.COMPLETE))
|
||||
.and(getPaymentGatewayCondition(container))
|
||||
)
|
||||
.orderBy(charge.id.asc())
|
||||
.fetchFirst()
|
||||
}
|
||||
|
||||
private fun getPaymentGatewayCondition(container: String): BooleanExpression? {
|
||||
val paymentGatewayCondition = when (container) {
|
||||
"aos" -> {
|
||||
payment.paymentGateway.eq(PaymentGateway.PG)
|
||||
.or(payment.paymentGateway.eq(PaymentGateway.GOOGLE_IAP))
|
||||
}
|
||||
|
||||
"ios" -> {
|
||||
payment.paymentGateway.eq(PaymentGateway.PG)
|
||||
.or(payment.paymentGateway.eq(PaymentGateway.APPLE_IAP))
|
||||
}
|
||||
|
||||
else -> payment.paymentGateway.eq(PaymentGateway.PG)
|
||||
}
|
||||
return paymentGatewayCondition
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user