From e33e3b43b7c85b271844dd27ce3d2963d7b23b39 Mon Sep 17 00:00:00 2001 From: Klaus Date: Sat, 13 Sep 2025 04:33:01 +0900 Subject: [PATCH] =?UTF-8?q?fix(admin-chat-calculate):=20=EC=BA=90=EB=A6=AD?= =?UTF-8?q?=ED=84=B0=20=EC=A0=95=EC=82=B0=20API?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - ONLY_FULL_GROUP_BY 대응 --- .../AdminChatCalculateQueryRepository.kt | 20 ++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/admin/chat/calculate/AdminChatCalculateQueryRepository.kt b/src/main/kotlin/kr/co/vividnext/sodalive/admin/chat/calculate/AdminChatCalculateQueryRepository.kt index 3eecc5e..defc36b 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/admin/chat/calculate/AdminChatCalculateQueryRepository.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/admin/chat/calculate/AdminChatCalculateQueryRepository.kt @@ -2,6 +2,7 @@ package kr.co.vividnext.sodalive.admin.chat.calculate import com.querydsl.core.types.Projections import com.querydsl.core.types.dsl.CaseBuilder +import com.querydsl.core.types.dsl.Expressions import com.querydsl.jpa.impl.JPAQueryFactory import kr.co.vividnext.sodalive.can.use.CanUsage import kr.co.vividnext.sodalive.can.use.QUseCan.useCan @@ -50,16 +51,25 @@ class AdminChatCalculateQueryRepository( val c2 = QChatCharacter("c2") val characterIdExpr = c1.id.coalesce(c2.id) - val characterNameExpr = c1.name.coalesce(c2.name) - val characterImagePathExpr = c1.imagePath.coalesce(c2.imagePath) + // ONLY_FULL_GROUP_BY 대응: name/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 .select( Projections.constructor( ChatCharacterCalculateQueryData::class.java, characterIdExpr, - characterNameExpr, - characterImagePathExpr.prepend("/").prepend(imageHost), + characterNameAgg, + characterImagePathAgg.prepend("/").prepend(imageHost), imageSum, messageSum, quotaSum @@ -81,7 +91,7 @@ class AdminChatCalculateQueryRepository( .and(useCan.createdAt.goe(startUtc)) .and(useCan.createdAt.loe(endInclusiveUtc)) ) - .groupBy(characterIdExpr, characterNameExpr, characterImagePathExpr) + .groupBy(characterIdExpr) when (sort) { ChatCharacterCalculateSort.TOTAL_SALES_DESC ->