feat: 유저 행동 기록 및 포인트 지급 로직 구현 + 회원가입 연동

This commit is contained in:
2025-04-21 22:03:58 +09:00
parent d94418067f
commit e2c70de2e0
6 changed files with 176 additions and 1 deletions

View File

@@ -0,0 +1,5 @@
package kr.co.vividnext.sodalive.point
import org.springframework.data.jpa.repository.JpaRepository
interface MemberPointRepository : JpaRepository<MemberPoint, Long>

View File

@@ -0,0 +1,27 @@
package kr.co.vividnext.sodalive.point
import com.querydsl.jpa.impl.JPAQueryFactory
import kr.co.vividnext.sodalive.point.QPointGrantLog.pointGrantLog
import org.springframework.data.jpa.repository.JpaRepository
interface PointGrantLogRepository : JpaRepository<PointGrantLog, Long>, PointGrantLogQueryRepository
interface PointGrantLogQueryRepository {
fun existsByMemberIdAndPolicyId(memberId: Long, policyId: Long): Boolean
}
class PointGrantLogQueryRepositoryImpl(
private val queryFactory: JPAQueryFactory
) : PointGrantLogQueryRepository {
override fun existsByMemberIdAndPolicyId(memberId: Long, policyId: Long): Boolean {
return queryFactory
.select(pointGrantLog.id)
.from(pointGrantLog)
.where(
pointGrantLog.memberId.eq(memberId),
pointGrantLog.policyId.eq(policyId)
)
.fetch()
.isNotEmpty()
}
}

View File

@@ -0,0 +1,34 @@
package kr.co.vividnext.sodalive.point
import com.querydsl.jpa.impl.JPAQueryFactory
import kr.co.vividnext.sodalive.point.QPointRewardPolicy.pointRewardPolicy
import kr.co.vividnext.sodalive.useraction.ActionType
import org.springframework.data.jpa.repository.JpaRepository
import java.time.LocalDateTime
interface PointRewardPolicyRepository : JpaRepository<PointRewardPolicy, Long>, PointRewardPolicyQueryRepository
interface PointRewardPolicyQueryRepository {
fun findByActionTypeAndIsActiveTrue(actionType: ActionType, nowDateTime: LocalDateTime): PointRewardPolicy?
}
class PointRewardPolicyQueryRepositoryImpl(
private val queryFactory: JPAQueryFactory
) : PointRewardPolicyQueryRepository {
override fun findByActionTypeAndIsActiveTrue(
actionType: ActionType,
nowDateTime: LocalDateTime
): PointRewardPolicy? {
return queryFactory
.selectFrom(pointRewardPolicy)
.where(
pointRewardPolicy.isActive,
pointRewardPolicy.actionType.eq(actionType),
pointRewardPolicy.startDate.loe(nowDateTime),
pointRewardPolicy.endDate.goe(nowDateTime)
.or(pointRewardPolicy.endDate.isNull)
)
.orderBy(pointRewardPolicy.endDate.asc())
.fetchFirst()
}
}