diff --git a/docs/20260305_관리자정산콘텐츠크리에이터별조회SQL오류수정.md b/docs/20260305_관리자정산콘텐츠크리에이터별조회SQL오류수정.md new file mode 100644 index 00000000..5be047cf --- /dev/null +++ b/docs/20260305_관리자정산콘텐츠크리에이터별조회SQL오류수정.md @@ -0,0 +1,20 @@ +# 관리자 정산 콘텐츠 크리에이터별 조회 SQL 오류 수정 작업 계획 + +- [x] `/admin/calculate/content-by-creator` 호출 경로(Controller/Service/Repository)와 SQL 생성 지점을 확인한다. +- [x] `ONLY_FULL_GROUP_BY` 위반 원인(`content_settlement_ratio` 비집계 컬럼)을 제거하는 최소 수정안을 적용한다. +- [x] 수정된 쿼리가 기존 응답 스키마/정산 계산 로직과 호환되는지 코드 레벨로 검증한다. +- [x] `lsp_diagnostics`, 관련 테스트, 빌드를 실행해 정상 동작을 검증한다. + +## 검증 기록 + +### 1차 수정 +- 무엇을: `AdminCalculateQueryRepository#getCalculateContentByCreator`의 `groupBy`를 `member.id`에서 `member.id, creatorSettlementRatio.contentSettlementRatio`로 수정해 SELECT의 비집계 컬럼(`contentSettlementRatio`)이 GROUP BY에 포함되도록 변경했다. +- 왜: `/admin/calculate/content-by-creator` 조회 시 `creator_settlement_ratio.content_settlement_ratio`가 SELECT 절에 존재하지만 GROUP BY에 없어 MySQL `ONLY_FULL_GROUP_BY` 모드에서 SQLSyntaxErrorException이 발생했기 때문이다. +- 어떻게: + - 경로/원인 확인: `AdminCalculateController#getCalculateContentByCreator` -> `AdminCalculateService#getCalculateContentByCreator` -> `AdminCalculateQueryRepository#getCalculateContentByCreator` 호출 체인을 확인했다. + - 코드 수정: `src/main/kotlin/kr/co/vividnext/sodalive/admin/calculate/AdminCalculateQueryRepository.kt`의 콘텐츠 크리에이터별 조회 쿼리 `groupBy`를 보완했다. + - 검증 실행 결과: + - `lsp_diagnostics` (`AdminCalculateQueryRepository.kt`) -> Kotlin LSP 미설정으로 진단 불가 + - `./gradlew test` -> 성공 + - `./gradlew build -x test` -> 성공 + - `./gradlew tasks --all` -> 성공 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 390d75a6..0549a4a7 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 @@ -361,7 +361,7 @@ class AdminCalculateQueryRepository(private val queryFactory: JPAQueryFactory) { .and(order.createdAt.loe(endDate)) .and(order.isActive.isTrue) ) - .groupBy(member.id) + .groupBy(member.id, creatorSettlementRatio.contentSettlementRatio) .orderBy(member.id.desc()) .offset(offset) .limit(limit)