From dbc5d6c31e3608a5180f6fe83b138556729fca7e Mon Sep 17 00:00:00 2001 From: Klaus Date: Mon, 8 Jul 2024 21:39:30 +0900 Subject: [PATCH] =?UTF-8?q?=ED=81=AC=EB=A6=AC=EC=97=90=EC=9D=B4=ED=84=B0?= =?UTF-8?q?=20=EA=B8=B0=EC=A4=80=20=EC=BB=A4=EB=AE=A4=EB=8B=88=ED=8B=B0=20?= =?UTF-8?q?=ED=95=A9=EA=B3=84=20=EC=A0=95=EC=82=B0=20API=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../calculate/AdminCalculateController.kt | 14 +++++ .../AdminCalculateQueryRepository.kt | 52 +++++++++++++++++++ .../admin/calculate/AdminCalculateService.kt | 17 ++++++ 3 files changed, 83 insertions(+) diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/admin/calculate/AdminCalculateController.kt b/src/main/kotlin/kr/co/vividnext/sodalive/admin/calculate/AdminCalculateController.kt index 36655ae..ddcb051 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/admin/calculate/AdminCalculateController.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/admin/calculate/AdminCalculateController.kt @@ -76,4 +76,18 @@ class AdminCalculateController(private val service: AdminCalculateService) { pageable.pageSize.toLong() ) ) + + @GetMapping("/community-by-creator") + fun getCalculateCommunityByCreator( + @RequestParam startDateStr: String, + @RequestParam endDateStr: String, + pageable: Pageable + ) = ApiResponse.ok( + service.getCalculateCommunityByCreator( + startDateStr, + endDateStr, + pageable.offset, + pageable.pageSize.toLong() + ) + ) } diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/admin/calculate/AdminCalculateQueryRepository.kt b/src/main/kotlin/kr/co/vividnext/sodalive/admin/calculate/AdminCalculateQueryRepository.kt index 8450c45..6a45e4a 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/admin/calculate/AdminCalculateQueryRepository.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/admin/calculate/AdminCalculateQueryRepository.kt @@ -324,4 +324,56 @@ class AdminCalculateQueryRepository(private val queryFactory: JPAQueryFactory) { .limit(limit) .fetch() } + + fun getCalculateCommunityByCreatorTotalCount(startDate: LocalDateTime, endDate: LocalDateTime): Int { + return queryFactory + .select(member.id) + .from(useCan) + .innerJoin(useCan.communityPost, creatorCommunity) + .innerJoin(creatorCommunity.member, member) + .leftJoin(creatorSettlementRatio) + .on(member.id.eq(creatorSettlementRatio.member.id)) + .where( + useCan.isRefund.isFalse + .and(useCan.canUsage.eq(CanUsage.PAID_COMMUNITY_POST)) + .and(useCan.createdAt.goe(startDate)) + .and(useCan.createdAt.loe(endDate)) + ) + .groupBy(member.id) + .fetch() + .size + } + + fun getCalculateCommunityByCreator( + startDate: LocalDateTime, + endDate: LocalDateTime, + offset: Long, + limit: Long + ): List { + return queryFactory + .select( + QGetCalculateByCreatorQueryData( + member.email, + member.nickname, + useCan.can.add(useCan.rewardCan).sum(), + creatorSettlementRatio.communitySettlementRatio + ) + ) + .from(useCan) + .innerJoin(useCan.communityPost, creatorCommunity) + .innerJoin(creatorCommunity.member, member) + .leftJoin(creatorSettlementRatio) + .on(member.id.eq(creatorSettlementRatio.member.id)) + .where( + useCan.isRefund.isFalse + .and(useCan.canUsage.eq(CanUsage.PAID_COMMUNITY_POST)) + .and(useCan.createdAt.goe(startDate)) + .and(useCan.createdAt.loe(endDate)) + ) + .groupBy(member.id, creatorSettlementRatio.communitySettlementRatio) + .orderBy(member.id.desc()) + .offset(offset) + .limit(limit) + .fetch() + } } diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/admin/calculate/AdminCalculateService.kt b/src/main/kotlin/kr/co/vividnext/sodalive/admin/calculate/AdminCalculateService.kt index b0cf463..255d456 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/admin/calculate/AdminCalculateService.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/admin/calculate/AdminCalculateService.kt @@ -122,4 +122,21 @@ class AdminCalculateService(private val repository: AdminCalculateQueryRepositor GetCalculateByCreatorResponse(totalCount, items) } + + fun getCalculateCommunityByCreator( + startDateStr: String, + endDateStr: String, + offset: Long, + limit: Long + ) = run { + val startDate = startDateStr.convertLocalDateTime() + val endDate = endDateStr.convertLocalDateTime(hour = 23, minute = 59, second = 59) + + val totalCount = repository.getCalculateCommunityByCreatorTotalCount(startDate, endDate) + val items = repository + .getCalculateCommunityByCreator(startDate, endDate, offset, limit) + .map { it.toGetCalculateByCreator() } + + GetCalculateByCreatorResponse(totalCount, items) + } }