Merge pull request '첫 충전 이벤트 - 본인인증한 전체 계정 중 첫 충전 시에만 첫충전 이벤트 적용' (#15) from test into main
Reviewed-on: #15
This commit is contained in:
commit
99bf829c88
|
@ -17,7 +17,7 @@ interface ChargeRepository : JpaRepository<Charge, Long>, ChargeQueryRepository
|
||||||
interface ChargeQueryRepository {
|
interface ChargeQueryRepository {
|
||||||
fun getOldestChargeWhereRewardCanGreaterThan0(chargeId: Long, memberId: Long, container: String): Charge?
|
fun getOldestChargeWhereRewardCanGreaterThan0(chargeId: Long, memberId: Long, container: String): Charge?
|
||||||
fun getOldestChargeWhereChargeCanGreaterThan0(chargeId: Long, memberId: Long, container: String): Charge?
|
fun getOldestChargeWhereChargeCanGreaterThan0(chargeId: Long, memberId: Long, container: String): Charge?
|
||||||
fun getChargeCountAfterDate(date: LocalDateTime): Int
|
fun getChargeCountAfterDate(memberId: Long, date: LocalDateTime): Int
|
||||||
}
|
}
|
||||||
|
|
||||||
class ChargeQueryRepositoryImpl(private val queryFactory: JPAQueryFactory) : ChargeQueryRepository {
|
class ChargeQueryRepositoryImpl(private val queryFactory: JPAQueryFactory) : ChargeQueryRepository {
|
||||||
|
@ -61,8 +61,19 @@ class ChargeQueryRepositoryImpl(private val queryFactory: JPAQueryFactory) : Cha
|
||||||
.fetchFirst()
|
.fetchFirst()
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getChargeCountAfterDate(date: LocalDateTime): Int {
|
override fun getChargeCountAfterDate(memberId: Long, date: LocalDateTime): Int {
|
||||||
return 0
|
return queryFactory
|
||||||
|
.select(charge.id)
|
||||||
|
.from(charge)
|
||||||
|
.innerJoin(charge.payment, payment)
|
||||||
|
.where(
|
||||||
|
charge.member.id.eq(memberId)
|
||||||
|
.and(charge.createdAt.after(date))
|
||||||
|
.and(charge.status.eq(ChargeStatus.CHARGE))
|
||||||
|
.and(payment.status.`in`(PaymentStatus.COMPLETE, PaymentStatus.RETURN))
|
||||||
|
)
|
||||||
|
.fetch()
|
||||||
|
.size
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun getPaymentGatewayCondition(container: String): BooleanExpression? {
|
private fun getPaymentGatewayCondition(container: String): BooleanExpression? {
|
||||||
|
|
|
@ -10,6 +10,7 @@ import kr.co.vividnext.sodalive.common.SodaException
|
||||||
import kr.co.vividnext.sodalive.fcm.FcmEvent
|
import kr.co.vividnext.sodalive.fcm.FcmEvent
|
||||||
import kr.co.vividnext.sodalive.fcm.FcmEventType
|
import kr.co.vividnext.sodalive.fcm.FcmEventType
|
||||||
import kr.co.vividnext.sodalive.member.Member
|
import kr.co.vividnext.sodalive.member.Member
|
||||||
|
import kr.co.vividnext.sodalive.member.auth.AuthRepository
|
||||||
import org.springframework.context.ApplicationEventPublisher
|
import org.springframework.context.ApplicationEventPublisher
|
||||||
import org.springframework.data.repository.findByIdOrNull
|
import org.springframework.data.repository.findByIdOrNull
|
||||||
import org.springframework.stereotype.Service
|
import org.springframework.stereotype.Service
|
||||||
|
@ -20,6 +21,7 @@ import kotlin.math.round
|
||||||
@Service
|
@Service
|
||||||
class ChargeEventService(
|
class ChargeEventService(
|
||||||
private val repository: ChargeEventRepository,
|
private val repository: ChargeEventRepository,
|
||||||
|
private val authRepository: AuthRepository,
|
||||||
private val chargeRepository: ChargeRepository,
|
private val chargeRepository: ChargeRepository,
|
||||||
private val chargeEventRepository: ChargeEventRepository,
|
private val chargeEventRepository: ChargeEventRepository,
|
||||||
private val applicationEventPublisher: ApplicationEventPublisher
|
private val applicationEventPublisher: ApplicationEventPublisher
|
||||||
|
@ -30,8 +32,13 @@ class ChargeEventService(
|
||||||
?: throw SodaException("이벤트가 적용되지 않았습니다.")
|
?: throw SodaException("이벤트가 적용되지 않았습니다.")
|
||||||
|
|
||||||
if (member.auth != null) {
|
if (member.auth != null) {
|
||||||
val authDate = member.auth!!.createdAt!!
|
val authDate = authRepository.getOldestCreatedAtByDi(member.auth!!.di)
|
||||||
val chargeCount = chargeRepository.getChargeCountAfterDate(authDate)
|
val memberIds = authRepository.getMemberIdsByDi(member.auth!!.di)
|
||||||
|
|
||||||
|
var chargeCount = 0
|
||||||
|
for (memberId in memberIds) {
|
||||||
|
chargeCount += chargeRepository.getChargeCountAfterDate(memberId = memberId, authDate)
|
||||||
|
}
|
||||||
|
|
||||||
if (chargeCount > 0) {
|
if (chargeCount > 0) {
|
||||||
applyOtherEvent(charge, member)
|
applyOtherEvent(charge, member)
|
||||||
|
|
|
@ -1,7 +1,36 @@
|
||||||
package kr.co.vividnext.sodalive.member.auth
|
package kr.co.vividnext.sodalive.member.auth
|
||||||
|
|
||||||
|
import com.querydsl.jpa.impl.JPAQueryFactory
|
||||||
|
import kr.co.vividnext.sodalive.member.QMember.member
|
||||||
|
import kr.co.vividnext.sodalive.member.auth.QAuth.auth
|
||||||
import org.springframework.data.jpa.repository.JpaRepository
|
import org.springframework.data.jpa.repository.JpaRepository
|
||||||
import org.springframework.stereotype.Repository
|
import org.springframework.stereotype.Repository
|
||||||
|
import java.time.LocalDateTime
|
||||||
|
|
||||||
@Repository
|
@Repository
|
||||||
interface AuthRepository : JpaRepository<Auth, Long>
|
interface AuthRepository : JpaRepository<Auth, Long>, AuthQueryRepository
|
||||||
|
|
||||||
|
interface AuthQueryRepository {
|
||||||
|
fun getOldestCreatedAtByDi(di: String): LocalDateTime
|
||||||
|
fun getMemberIdsByDi(di: String): List<Long>
|
||||||
|
}
|
||||||
|
|
||||||
|
class AuthQueryRepositoryImpl(private val queryFactory: JPAQueryFactory) : AuthQueryRepository {
|
||||||
|
override fun getOldestCreatedAtByDi(di: String): LocalDateTime {
|
||||||
|
return queryFactory
|
||||||
|
.select(auth.createdAt)
|
||||||
|
.from(auth)
|
||||||
|
.where(auth.di.eq(di))
|
||||||
|
.orderBy(auth.createdAt.asc())
|
||||||
|
.fetchFirst()
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun getMemberIdsByDi(di: String): List<Long> {
|
||||||
|
return queryFactory
|
||||||
|
.select(member.id)
|
||||||
|
.from(member)
|
||||||
|
.leftJoin(member.auth, auth)
|
||||||
|
.where(auth.di.eq(di))
|
||||||
|
.fetch()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue