fix(push-notification-list): 푸시 알림 조회 JSON 함수 쿼리 파싱 오류를 수정한다
This commit is contained in:
17
docs/20260312_푸시알림조회쿼리오류수정.md
Normal file
17
docs/20260312_푸시알림조회쿼리오류수정.md
Normal file
@@ -0,0 +1,17 @@
|
||||
# 푸시 알림 조회 쿼리 오류 수정
|
||||
|
||||
- [x] `PushNotificationController` 연계 조회 API에서 발생한 DB 조회 오류 재현 경로와 실제 실패 쿼리 식별
|
||||
- [x] `QuerySyntaxException` 원인인 JPQL/HQL 함수 사용 구문을 코드베이스 패턴에 맞게 수정
|
||||
- [x] 수정 코드 정적 진단 및 테스트/빌드 검증 수행
|
||||
- [x] 검증 결과를 문서 하단에 기록
|
||||
|
||||
## 검증 기록
|
||||
|
||||
### 1차 수정
|
||||
- 무엇을: `PushNotificationListRepository.recipientContainsMember`의 QueryDSL 템플릿을 `JSON_CONTAINS({0}, JSON_ARRAY({1}), '$')`에서 `function('JSON_CONTAINS', {0}, function('JSON_ARRAY', {1}), '$') = 1`로 수정했다.
|
||||
- 왜: Hibernate JPQL/HQL 파서는 MySQL 함수명(`JSON_CONTAINS`, `JSON_ARRAY`) 직접 호출 구문을 인식하지 못해 `QuerySyntaxException`이 발생하므로, JPQL 표준 함수 호출 래퍼(`function`)로 감싸 파싱 가능하도록 변경이 필요했다.
|
||||
- 어떻게:
|
||||
- 검색: `grep`/AST/Explore/Librarian로 `PushNotificationController -> PushNotificationService -> PushNotificationListRepository` 호출 흐름과 문제 쿼리를 확인했다.
|
||||
- 정적 진단: `lsp_diagnostics`로 Kotlin 파일 진단을 시도했으나 현재 환경에 `.kt` LSP 서버 미설정으로 실행 불가를 확인했다.
|
||||
- 테스트: `./gradlew test --tests "kr.co.vividnext.sodalive.fcm.notification.PushNotificationServiceTest" --tests "kr.co.vividnext.sodalive.fcm.notification.PushNotificationControllerTest"` 실행 결과 `BUILD SUCCESSFUL`.
|
||||
- 빌드: `./gradlew build -x test` 실행 결과 `BUILD SUCCESSFUL`.
|
||||
@@ -124,7 +124,7 @@ class PushNotificationListQueryRepositoryImpl(
|
||||
recipientChunk.notification.id.eq(pushNotificationList.id)
|
||||
.and(
|
||||
Expressions.booleanTemplate(
|
||||
"JSON_CONTAINS({0}, JSON_ARRAY({1}), '$')",
|
||||
"function('JSON_CONTAINS', {0}, function('JSON_ARRAY', {1}), '$') = 1",
|
||||
recipientChunk.recipientMemberIds,
|
||||
memberId
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user