feat(admin-chat-calculate): 캐릭터 정산 API에 totalCount 추가

This commit is contained in:
Klaus 2025-09-13 03:06:55 +09:00
parent eec63cc7b2
commit b752434fbb
3 changed files with 31 additions and 3 deletions

View File

@ -68,4 +68,24 @@ class AdminChatCalculateQueryRepository(
.limit(limit)
.fetch()
}
fun getCharacterCalculateTotalCount(
startUtc: LocalDateTime,
endInclusiveUtc: LocalDateTime
): Int {
return queryFactory
.select(chatCharacter.id)
.from(useCan)
.innerJoin(useCan.characterImage, characterImage)
.innerJoin(characterImage.chatCharacter, chatCharacter)
.where(
useCan.isRefund.isFalse
.and(useCan.canUsage.`in`(CanUsage.CHARACTER_IMAGE_PURCHASE, CanUsage.CHAT_MESSAGE_PURCHASE))
.and(useCan.createdAt.goe(startUtc))
.and(useCan.createdAt.loe(endInclusiveUtc))
)
.groupBy(chatCharacter.id)
.fetch()
.size
}
}

View File

@ -21,7 +21,7 @@ class AdminChatCalculateService(
sort: ChatCharacterCalculateSort,
offset: Long,
pageSize: Int
): List<ChatCharacterCalculateItem> {
): ChatCharacterCalculateResponse {
// 날짜 유효성 검증 (KST 기준)
val startDate = LocalDate.parse(startDateStr, dateFormatter)
val endDate = LocalDate.parse(endDateStr, dateFormatter)
@ -35,7 +35,9 @@ class AdminChatCalculateService(
val startUtc = startDateStr.convertLocalDateTime()
val endInclusiveUtc = endDateStr.convertLocalDateTime(hour = 23, minute = 59, second = 59)
val totalCount = repository.getCharacterCalculateTotalCount(startUtc, endInclusiveUtc)
val rows = repository.getCharacterCalculate(startUtc, endInclusiveUtc, sort, offset, pageSize.toLong())
return rows.map { it.toItem() }
val items = rows.map { it.toItem() }
return ChatCharacterCalculateResponse(totalCount, items)
}
}

View File

@ -20,7 +20,7 @@ data class ChatCharacterCalculateQueryData @QueryProjection constructor(
val messagePurchaseCan: Int?
)
// 응답 DTO
// 응답 DTO (아이템)
data class ChatCharacterCalculateItem(
@JsonProperty("characterId") val characterId: Long,
@JsonProperty("characterImage") val characterImage: String?,
@ -32,6 +32,12 @@ data class ChatCharacterCalculateItem(
@JsonProperty("settlementKrw") val settlementKrw: Int
)
// 응답 DTO (전체)
data class ChatCharacterCalculateResponse(
@JsonProperty("totalCount") val totalCount: Int,
@JsonProperty("items") val items: List<ChatCharacterCalculateItem>
)
fun ChatCharacterCalculateQueryData.toItem(): ChatCharacterCalculateItem {
val image = imagePurchaseCan ?: 0
val message = messagePurchaseCan ?: 0