From eab9ac5f051612c9927cc588d3890dc1ce84de54 Mon Sep 17 00:00:00 2001 From: Klaus Date: Fri, 25 Aug 2023 01:09:11 +0900 Subject: [PATCH 1/2] =?UTF-8?q?=EC=B2=AB=20=EC=B6=A9=EC=A0=84=20=EC=9D=B4?= =?UTF-8?q?=EB=B2=A4=ED=8A=B8=20-=20=EB=B3=B8=EC=9D=B8=EC=9D=B8=EC=A6=9D?= =?UTF-8?q?=ED=95=9C=20=EC=A0=84=EC=B2=B4=20=EA=B3=84=EC=A0=95=20=EC=A4=91?= =?UTF-8?q?=20=EC=B2=AB=20=EC=B6=A9=EC=A0=84=20=EC=8B=9C=EC=97=90=EB=A7=8C?= =?UTF-8?q?=20=EC=B2=AB=EC=B6=A9=EC=A0=84=20=EC=9D=B4=EB=B2=A4=ED=8A=B8=20?= =?UTF-8?q?=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sodalive/can/charge/ChargeRepository.kt | 16 ++++++++-- .../can/charge/event/ChargeEventService.kt | 11 +++++-- .../sodalive/member/auth/AuthRepository.kt | 31 ++++++++++++++++++- 3 files changed, 52 insertions(+), 6 deletions(-) diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/can/charge/ChargeRepository.kt b/src/main/kotlin/kr/co/vividnext/sodalive/can/charge/ChargeRepository.kt index 0b434d1..0d39604 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/can/charge/ChargeRepository.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/can/charge/ChargeRepository.kt @@ -17,7 +17,7 @@ interface ChargeRepository : JpaRepository, ChargeQueryRepository interface ChargeQueryRepository { fun getOldestChargeWhereRewardCanGreaterThan0(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 { @@ -61,8 +61,18 @@ class ChargeQueryRepositoryImpl(private val queryFactory: JPAQueryFactory) : Cha .fetchFirst() } - override fun getChargeCountAfterDate(date: LocalDateTime): Int { - return 0 + override fun getChargeCountAfterDate(memberId: Long, date: LocalDateTime): Int { + return queryFactory + .select(charge.id) + .from(charge) + .innerJoin(charge.payment, payment) + .where( + charge.member.id.eq(memberId) + .and(charge.createdAt.after(date)) + .and(payment.status.`in`(PaymentStatus.COMPLETE, PaymentStatus.RETURN)) + ) + .fetch() + .size } private fun getPaymentGatewayCondition(container: String): BooleanExpression? { diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/can/charge/event/ChargeEventService.kt b/src/main/kotlin/kr/co/vividnext/sodalive/can/charge/event/ChargeEventService.kt index bdcda79..632b623 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/can/charge/event/ChargeEventService.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/can/charge/event/ChargeEventService.kt @@ -10,6 +10,7 @@ import kr.co.vividnext.sodalive.common.SodaException import kr.co.vividnext.sodalive.fcm.FcmEvent import kr.co.vividnext.sodalive.fcm.FcmEventType import kr.co.vividnext.sodalive.member.Member +import kr.co.vividnext.sodalive.member.auth.AuthRepository import org.springframework.context.ApplicationEventPublisher import org.springframework.data.repository.findByIdOrNull import org.springframework.stereotype.Service @@ -20,6 +21,7 @@ import kotlin.math.round @Service class ChargeEventService( private val repository: ChargeEventRepository, + private val authRepository: AuthRepository, private val chargeRepository: ChargeRepository, private val chargeEventRepository: ChargeEventRepository, private val applicationEventPublisher: ApplicationEventPublisher @@ -30,8 +32,13 @@ class ChargeEventService( ?: throw SodaException("이벤트가 적용되지 않았습니다.") if (member.auth != null) { - val authDate = member.auth!!.createdAt!! - val chargeCount = chargeRepository.getChargeCountAfterDate(authDate) + val authDate = authRepository.getOldestCreatedAtByDi(member.auth!!.di) + val memberIds = authRepository.getMemberIdsByDi(member.auth!!.di) + + var chargeCount = 0 + for (memberId in memberIds) { + chargeCount += chargeRepository.getChargeCountAfterDate(memberId = memberId, authDate) + } if (chargeCount > 0) { applyOtherEvent(charge, member) diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/member/auth/AuthRepository.kt b/src/main/kotlin/kr/co/vividnext/sodalive/member/auth/AuthRepository.kt index 954dc91..1ee9747 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/member/auth/AuthRepository.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/member/auth/AuthRepository.kt @@ -1,7 +1,36 @@ 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.stereotype.Repository +import java.time.LocalDateTime @Repository -interface AuthRepository : JpaRepository +interface AuthRepository : JpaRepository, AuthQueryRepository + +interface AuthQueryRepository { + fun getOldestCreatedAtByDi(di: String): LocalDateTime + fun getMemberIdsByDi(di: String): List +} + +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 { + return queryFactory + .select(member.id) + .from(member) + .leftJoin(member.auth, auth) + .where(auth.di.eq(di)) + .fetch() + } +} From 65e0b87d79e3bab2a42423eda1df698ac69abab7 Mon Sep 17 00:00:00 2001 From: Klaus Date: Fri, 25 Aug 2023 01:17:06 +0900 Subject: [PATCH 2/2] =?UTF-8?q?=EC=B2=AB=20=EC=B6=A9=EC=A0=84=20=EC=9D=B4?= =?UTF-8?q?=EB=B2=A4=ED=8A=B8=20-=20=EB=B3=B8=EC=9D=B8=EC=9D=B8=EC=A6=9D?= =?UTF-8?q?=ED=95=9C=20=EC=A0=84=EC=B2=B4=20=EA=B3=84=EC=A0=95=20=EC=A4=91?= =?UTF-8?q?=20=EC=B2=AB=20=EC=B6=A9=EC=A0=84=20=EC=8B=9C=EC=97=90=EB=A7=8C?= =?UTF-8?q?=20=EC=B2=AB=EC=B6=A9=EC=A0=84=20=EC=9D=B4=EB=B2=A4=ED=8A=B8=20?= =?UTF-8?q?=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../kr/co/vividnext/sodalive/can/charge/ChargeRepository.kt | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/can/charge/ChargeRepository.kt b/src/main/kotlin/kr/co/vividnext/sodalive/can/charge/ChargeRepository.kt index 0d39604..dd79d97 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/can/charge/ChargeRepository.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/can/charge/ChargeRepository.kt @@ -69,6 +69,7 @@ class ChargeQueryRepositoryImpl(private val queryFactory: JPAQueryFactory) : Cha .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()