From cae3a92a66b68abee1141be69463d957382b3e62 Mon Sep 17 00:00:00 2001 From: Klaus Date: Thu, 10 Apr 2025 11:12:43 +0900 Subject: [PATCH] =?UTF-8?q?=EC=9D=BC=EB=B3=84=20=EC=A0=84=EC=B2=B4=20?= =?UTF-8?q?=ED=9A=8C=EC=9B=90=20=EC=88=98=20-=20=EC=9D=B4=EB=A9=94?= =?UTF-8?q?=EC=9D=BC,=20=EA=B5=AC=EA=B8=80,=20=EC=B9=B4=EC=B9=B4=EC=98=A4?= =?UTF-8?q?=20=ED=9A=8C=EC=9B=90=20=EC=88=98=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../member/AdminMemberStatisticsRepository.kt | 97 +++++++++++++++++++ .../member/AdminMemberStatisticsService.kt | 33 +++++++ .../member/GetMemberStatisticsResponse.kt | 6 ++ 3 files changed, 136 insertions(+) diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/admin/statistics/member/AdminMemberStatisticsRepository.kt b/src/main/kotlin/kr/co/vividnext/sodalive/admin/statistics/member/AdminMemberStatisticsRepository.kt index 003c079..332c48f 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/admin/statistics/member/AdminMemberStatisticsRepository.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/admin/statistics/member/AdminMemberStatisticsRepository.kt @@ -8,6 +8,7 @@ import kr.co.vividnext.sodalive.can.charge.ChargeStatus import kr.co.vividnext.sodalive.can.charge.QCharge.charge import kr.co.vividnext.sodalive.can.payment.PaymentStatus import kr.co.vividnext.sodalive.can.payment.QPayment.payment +import kr.co.vividnext.sodalive.member.MemberProvider import kr.co.vividnext.sodalive.member.QMember.member import kr.co.vividnext.sodalive.member.QSignOut.signOut import kr.co.vividnext.sodalive.member.auth.QAuth.auth @@ -28,6 +29,45 @@ class AdminMemberStatisticsRepository(private val queryFactory: JPAQueryFactory) .size } + fun getTotalSignUpEmailCount(startDate: LocalDateTime, endDate: LocalDateTime): Int { + return queryFactory + .select(member.id) + .from(member) + .where( + member.createdAt.goe(startDate), + member.createdAt.loe(endDate), + member.provider.eq(MemberProvider.EMAIL) + ) + .fetch() + .size + } + + fun getTotalSignUpKakaoCount(startDate: LocalDateTime, endDate: LocalDateTime): Int { + return queryFactory + .select(member.id) + .from(member) + .where( + member.createdAt.goe(startDate), + member.createdAt.loe(endDate), + member.provider.eq(MemberProvider.KAKAO) + ) + .fetch() + .size + } + + fun getTotalSignUpGoogleCount(startDate: LocalDateTime, endDate: LocalDateTime): Int { + return queryFactory + .select(member.id) + .from(member) + .where( + member.createdAt.goe(startDate), + member.createdAt.loe(endDate), + member.provider.eq(MemberProvider.GOOGLE) + ) + .fetch() + .size + } + fun getTotalAuthCount(startDate: LocalDateTime, endDate: LocalDateTime): Int { return queryFactory .select(auth.id) @@ -92,6 +132,63 @@ class AdminMemberStatisticsRepository(private val queryFactory: JPAQueryFactory) .fetch() } + fun getSignUpEmailCountInRange(startDate: LocalDateTime, endDate: LocalDateTime): List { + return queryFactory + .select( + QDateAndMemberCount( + getFormattedDate(member.createdAt), + member.id.countDistinct().castToNum(Int::class.java) + ) + ) + .from(member) + .where( + member.createdAt.goe(startDate), + member.createdAt.loe(endDate), + member.provider.eq(MemberProvider.EMAIL) + ) + .groupBy(getFormattedDate(member.createdAt)) + .orderBy(getFormattedDate(member.createdAt).desc()) + .fetch() + } + + fun getSignUpKakaoCountInRange(startDate: LocalDateTime, endDate: LocalDateTime): List { + return queryFactory + .select( + QDateAndMemberCount( + getFormattedDate(member.createdAt), + member.id.countDistinct().castToNum(Int::class.java) + ) + ) + .from(member) + .where( + member.createdAt.goe(startDate), + member.createdAt.loe(endDate), + member.provider.eq(MemberProvider.KAKAO) + ) + .groupBy(getFormattedDate(member.createdAt)) + .orderBy(getFormattedDate(member.createdAt).desc()) + .fetch() + } + + fun getSignUpGoogleCountInRange(startDate: LocalDateTime, endDate: LocalDateTime): List { + return queryFactory + .select( + QDateAndMemberCount( + getFormattedDate(member.createdAt), + member.id.countDistinct().castToNum(Int::class.java) + ) + ) + .from(member) + .where( + member.createdAt.goe(startDate), + member.createdAt.loe(endDate), + member.provider.eq(MemberProvider.GOOGLE) + ) + .groupBy(getFormattedDate(member.createdAt)) + .orderBy(getFormattedDate(member.createdAt).desc()) + .fetch() + } + fun getAuthCountInRange(startDate: LocalDateTime, endDate: LocalDateTime): List { return queryFactory .select( diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/admin/statistics/member/AdminMemberStatisticsService.kt b/src/main/kotlin/kr/co/vividnext/sodalive/admin/statistics/member/AdminMemberStatisticsService.kt index d15ed01..ce08556 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/admin/statistics/member/AdminMemberStatisticsService.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/admin/statistics/member/AdminMemberStatisticsService.kt @@ -46,6 +46,18 @@ class AdminMemberStatisticsService(private val repository: AdminMemberStatistics .toLocalDateTime() val totalSignUpCount = repository.getTotalSignUpCount(startDate = startDateTime, endDate = endDateTime) + val totalSignUpEmailCount = repository.getTotalSignUpEmailCount( + startDate = startDateTime, + endDate = endDateTime + ) + val totalSignUpKakaoCount = repository.getTotalSignUpKakaoCount( + startDate = startDateTime, + endDate = endDateTime + ) + val totalSignUpGoogleCount = repository.getTotalSignUpGoogleCount( + startDate = startDateTime, + endDate = endDateTime + ) val totalAuthCount = repository.getTotalAuthCount(startDate = startDateTime, endDate = endDateTime) val totalSignOutCount = repository.getTotalSignOutCount(startDate = startDateTime, endDate = endDateTime) val totalPaymentMemberCount = repository.getPaymentMemberCount(startDate = startDateTime, endDate = endDateTime) @@ -65,6 +77,21 @@ class AdminMemberStatisticsService(private val repository: AdminMemberStatistics endDate = endDateTime ).associateBy({ it.date }, { it.memberCount }) + val signUpEmailCountInRange = repository.getSignUpEmailCountInRange( + startDate = startDateTime, + endDate = endDateTime + ).associateBy({ it.date }, { it.memberCount }) + + val signUpKakaoCountInRange = repository.getSignUpKakaoCountInRange( + startDate = startDateTime, + endDate = endDateTime + ).associateBy({ it.date }, { it.memberCount }) + + val signUpGoogleCountInRange = repository.getSignUpGoogleCountInRange( + startDate = startDateTime, + endDate = endDateTime + ).associateBy({ it.date }, { it.memberCount }) + val authCountInRange = repository.getAuthCountInRange( startDate = startDateTime, endDate = endDateTime @@ -91,6 +118,9 @@ class AdminMemberStatisticsService(private val repository: AdminMemberStatistics date = date, authCount = authCountInRange[date] ?: 0, signUpCount = signUpCountInRange[date] ?: 0, + signUpEmailCount = signUpEmailCountInRange[date] ?: 0, + signUpKakaoCount = signUpKakaoCountInRange[date] ?: 0, + signUpGoogleCount = signUpGoogleCountInRange[date] ?: 0, signOutCount = signOutCountInRange[date] ?: 0, paymentMemberCount = paymentMemberCountInRangeMap[date] ?: 0 ) @@ -101,6 +131,9 @@ class AdminMemberStatisticsService(private val repository: AdminMemberStatistics totalCount = dateRange.totalDays, totalAuthCount = totalAuthCount, totalSignUpCount = totalSignUpCount, + totalSignUpEmailCount = totalSignUpEmailCount, + totalSignUpKakaoCount = totalSignUpKakaoCount, + totalSignUpGoogleCount = totalSignUpGoogleCount, totalSignOutCount = totalSignOutCount, totalPaymentMemberCount = totalPaymentMemberCount, items = items diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/admin/statistics/member/GetMemberStatisticsResponse.kt b/src/main/kotlin/kr/co/vividnext/sodalive/admin/statistics/member/GetMemberStatisticsResponse.kt index 3dd6f5e..d2a6faa 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/admin/statistics/member/GetMemberStatisticsResponse.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/admin/statistics/member/GetMemberStatisticsResponse.kt @@ -4,6 +4,9 @@ data class GetMemberStatisticsResponse( val totalCount: Int, val totalAuthCount: Int, val totalSignUpCount: Int, + val totalSignUpEmailCount: Int, + val totalSignUpKakaoCount: Int, + val totalSignUpGoogleCount: Int, val totalSignOutCount: Int, val totalPaymentMemberCount: Int, val items: List @@ -13,6 +16,9 @@ data class GetMemberStatisticsItem( val date: String, val authCount: Int, val signUpCount: Int, + val signUpEmailCount: Int, + val signUpKakaoCount: Int, + val signUpGoogleCount: Int, val signOutCount: Int, val paymentMemberCount: Int )