fix(admin-chat-calculate): 캐릭터 정산 API

- ONLY_FULL_GROUP_BY 대응
This commit is contained in:
Klaus 2025-09-13 04:33:01 +09:00
parent 634bf759ca
commit e33e3b43b7
1 changed files with 15 additions and 5 deletions

View File

@ -2,6 +2,7 @@ package kr.co.vividnext.sodalive.admin.chat.calculate
import com.querydsl.core.types.Projections import com.querydsl.core.types.Projections
import com.querydsl.core.types.dsl.CaseBuilder import com.querydsl.core.types.dsl.CaseBuilder
import com.querydsl.core.types.dsl.Expressions
import com.querydsl.jpa.impl.JPAQueryFactory import com.querydsl.jpa.impl.JPAQueryFactory
import kr.co.vividnext.sodalive.can.use.CanUsage import kr.co.vividnext.sodalive.can.use.CanUsage
import kr.co.vividnext.sodalive.can.use.QUseCan.useCan import kr.co.vividnext.sodalive.can.use.QUseCan.useCan
@ -50,16 +51,25 @@ class AdminChatCalculateQueryRepository(
val c2 = QChatCharacter("c2") val c2 = QChatCharacter("c2")
val characterIdExpr = c1.id.coalesce(c2.id) val characterIdExpr = c1.id.coalesce(c2.id)
val characterNameExpr = c1.name.coalesce(c2.name) // ONLY_FULL_GROUP_BY 대응: name/imagePath는 집계 함수로 선택
val characterImagePathExpr = c1.imagePath.coalesce(c2.imagePath) val characterNameAgg = Expressions.stringTemplate(
"coalesce(max({0}), max({1}))",
c1.name,
c2.name
)
val characterImagePathAgg = Expressions.stringTemplate(
"coalesce(max({0}), max({1}))",
c1.imagePath,
c2.imagePath
)
val query = queryFactory val query = queryFactory
.select( .select(
Projections.constructor( Projections.constructor(
ChatCharacterCalculateQueryData::class.java, ChatCharacterCalculateQueryData::class.java,
characterIdExpr, characterIdExpr,
characterNameExpr, characterNameAgg,
characterImagePathExpr.prepend("/").prepend(imageHost), characterImagePathAgg.prepend("/").prepend(imageHost),
imageSum, imageSum,
messageSum, messageSum,
quotaSum quotaSum
@ -81,7 +91,7 @@ class AdminChatCalculateQueryRepository(
.and(useCan.createdAt.goe(startUtc)) .and(useCan.createdAt.goe(startUtc))
.and(useCan.createdAt.loe(endInclusiveUtc)) .and(useCan.createdAt.loe(endInclusiveUtc))
) )
.groupBy(characterIdExpr, characterNameExpr, characterImagePathExpr) .groupBy(characterIdExpr)
when (sort) { when (sort) {
ChatCharacterCalculateSort.TOTAL_SALES_DESC -> ChatCharacterCalculateSort.TOTAL_SALES_DESC ->