라이브 - 시작, 취소, 입장, 수정, 예약 API 추가

This commit is contained in:
2023-07-31 17:09:45 +09:00
parent 197cca1f1b
commit f393c7630e
29 changed files with 1044 additions and 19 deletions

View File

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