From 586db3f008c09be610fbd399c708c3e2ea034981 Mon Sep 17 00:00:00 2001 From: Klaus Date: Mon, 8 Jul 2024 16:11:42 +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=BD=98=ED=85=90=EC=B8=A0=20=ED=95=A9?= =?UTF-8?q?=EA=B3=84=20=EC=A0=95=EC=82=B0=20API=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../calculate/AdminCalculateController.kt | 14 +++++ .../AdminCalculateQueryRepository.kt | 54 ++++++++++++++++++- .../admin/calculate/AdminCalculateService.kt | 21 +++++++- ...orItem.kt => GetCalculateByCreatorItem.kt} | 2 +- ...a.kt => GetCalculateByCreatorQueryData.kt} | 6 +-- .../GetCalculateByCreatorResponse.kt | 6 +++ .../GetCalculateLiveByCreatorResponse.kt | 6 --- 7 files changed, 95 insertions(+), 14 deletions(-) rename src/main/kotlin/kr/co/vividnext/sodalive/admin/calculate/{GetCalculateLiveByCreatorItem.kt => GetCalculateByCreatorItem.kt} (92%) rename src/main/kotlin/kr/co/vividnext/sodalive/admin/calculate/{GetCalculateLiveByCreatorQueryData.kt => GetCalculateByCreatorQueryData.kt} (88%) create mode 100644 src/main/kotlin/kr/co/vividnext/sodalive/admin/calculate/GetCalculateByCreatorResponse.kt delete mode 100644 src/main/kotlin/kr/co/vividnext/sodalive/admin/calculate/GetCalculateLiveByCreatorResponse.kt 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 35bf0a4..36655ae 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 @@ -62,4 +62,18 @@ class AdminCalculateController(private val service: AdminCalculateService) { pageable.pageSize.toLong() ) ) + + @GetMapping("/content-by-creator") + fun getCalculateContentByCreator( + @RequestParam startDateStr: String, + @RequestParam endDateStr: String, + pageable: Pageable + ) = ApiResponse.ok( + service.getCalculateContentByCreator( + 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 78c0222..8450c45 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 @@ -248,10 +248,10 @@ class AdminCalculateQueryRepository(private val queryFactory: JPAQueryFactory) { endDate: LocalDateTime, offset: Long, limit: Long - ): List { + ): List { return queryFactory .select( - QGetCalculateLiveByCreatorQueryData( + QGetCalculateByCreatorQueryData( member.email, member.nickname, useCan.can.add(useCan.rewardCan).sum(), @@ -274,4 +274,54 @@ class AdminCalculateQueryRepository(private val queryFactory: JPAQueryFactory) { .limit(limit) .fetch() } + + fun getCalculateContentByCreatorTotalCount(startDate: LocalDateTime, endDate: LocalDateTime): Int { + return queryFactory + .select(member.id) + .from(order) + .innerJoin(order.audioContent, audioContent) + .innerJoin(audioContent.member, member) + .leftJoin(creatorSettlementRatio) + .on(member.id.eq(creatorSettlementRatio.member.id)) + .where( + order.createdAt.goe(startDate) + .and(order.createdAt.loe(endDate)) + .and(order.isActive.isTrue) + ) + .groupBy(member.id) + .fetch() + .size + } + + fun getCalculateContentByCreator( + startDate: LocalDateTime, + endDate: LocalDateTime, + offset: Long, + limit: Long + ): List { + return queryFactory + .select( + QGetCalculateByCreatorQueryData( + member.email, + member.nickname, + order.can.sum(), + creatorSettlementRatio.contentSettlementRatio + ) + ) + .from(order) + .innerJoin(order.audioContent, audioContent) + .innerJoin(audioContent.member, member) + .leftJoin(creatorSettlementRatio) + .on(member.id.eq(creatorSettlementRatio.member.id)) + .where( + order.createdAt.goe(startDate) + .and(order.createdAt.loe(endDate)) + .and(order.isActive.isTrue) + ) + .groupBy(member.id) + .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 985cd5a..b0cf463 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 @@ -101,8 +101,25 @@ class AdminCalculateService(private val repository: AdminCalculateQueryRepositor val totalCount = repository.getCalculateLiveByCreatorTotalCount(startDate, endDate) val items = repository .getCalculateLiveByCreator(startDate, endDate, offset, limit) - .map { it.toGetCalculateLiveByCreator() } + .map { it.toGetCalculateByCreator() } - GetCalculateLiveByCreatorResponse(totalCount, items) + GetCalculateByCreatorResponse(totalCount, items) + } + + fun getCalculateContentByCreator( + 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.getCalculateContentByCreatorTotalCount(startDate, endDate) + val items = repository + .getCalculateContentByCreator(startDate, endDate, offset, limit) + .map { it.toGetCalculateByCreator() } + + GetCalculateByCreatorResponse(totalCount, items) } } diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/admin/calculate/GetCalculateLiveByCreatorItem.kt b/src/main/kotlin/kr/co/vividnext/sodalive/admin/calculate/GetCalculateByCreatorItem.kt similarity index 92% rename from src/main/kotlin/kr/co/vividnext/sodalive/admin/calculate/GetCalculateLiveByCreatorItem.kt rename to src/main/kotlin/kr/co/vividnext/sodalive/admin/calculate/GetCalculateByCreatorItem.kt index 4d87621..6b33b29 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/admin/calculate/GetCalculateLiveByCreatorItem.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/admin/calculate/GetCalculateByCreatorItem.kt @@ -2,7 +2,7 @@ package kr.co.vividnext.sodalive.admin.calculate import com.fasterxml.jackson.annotation.JsonProperty -data class GetCalculateLiveByCreatorItem( +data class GetCalculateByCreatorItem( @JsonProperty("email") val email: String, @JsonProperty("nickname") val nickname: String, @JsonProperty("totalCan") val totalCan: Int, diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/admin/calculate/GetCalculateLiveByCreatorQueryData.kt b/src/main/kotlin/kr/co/vividnext/sodalive/admin/calculate/GetCalculateByCreatorQueryData.kt similarity index 88% rename from src/main/kotlin/kr/co/vividnext/sodalive/admin/calculate/GetCalculateLiveByCreatorQueryData.kt rename to src/main/kotlin/kr/co/vividnext/sodalive/admin/calculate/GetCalculateByCreatorQueryData.kt index 5e1bb86..e392da5 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/admin/calculate/GetCalculateLiveByCreatorQueryData.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/admin/calculate/GetCalculateByCreatorQueryData.kt @@ -4,13 +4,13 @@ import com.querydsl.core.annotations.QueryProjection import java.math.BigDecimal import java.math.RoundingMode -data class GetCalculateLiveByCreatorQueryData @QueryProjection constructor( +data class GetCalculateByCreatorQueryData @QueryProjection constructor( val email: String, val nickname: String, val totalCan: Int, val settlementRatio: Int? ) { - fun toGetCalculateLiveByCreator(): GetCalculateLiveByCreatorItem { + fun toGetCalculateByCreator(): GetCalculateByCreatorItem { // 원화 = totalCoin * 100 ( 캔 1개 = 100원 ) val totalKrw = BigDecimal(totalCan).multiply(BigDecimal(100)) @@ -30,7 +30,7 @@ data class GetCalculateLiveByCreatorQueryData @QueryProjection constructor( // 입금액 val depositAmount = settlementAmount.subtract(tax) - return GetCalculateLiveByCreatorItem( + return GetCalculateByCreatorItem( email = email, nickname = nickname, totalCan = totalCan, diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/admin/calculate/GetCalculateByCreatorResponse.kt b/src/main/kotlin/kr/co/vividnext/sodalive/admin/calculate/GetCalculateByCreatorResponse.kt new file mode 100644 index 0000000..49036e3 --- /dev/null +++ b/src/main/kotlin/kr/co/vividnext/sodalive/admin/calculate/GetCalculateByCreatorResponse.kt @@ -0,0 +1,6 @@ +package kr.co.vividnext.sodalive.admin.calculate + +data class GetCalculateByCreatorResponse( + val totalCount: Int, + val items: List +) diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/admin/calculate/GetCalculateLiveByCreatorResponse.kt b/src/main/kotlin/kr/co/vividnext/sodalive/admin/calculate/GetCalculateLiveByCreatorResponse.kt deleted file mode 100644 index cd93b59..0000000 --- a/src/main/kotlin/kr/co/vividnext/sodalive/admin/calculate/GetCalculateLiveByCreatorResponse.kt +++ /dev/null @@ -1,6 +0,0 @@ -package kr.co.vividnext.sodalive.admin.calculate - -data class GetCalculateLiveByCreatorResponse( - val totalCount: Int, - val items: List -)