fix(can): 캔 사용 내역 조회 DISTINCT 오류를 수정한다
This commit is contained in:
16
docs/20260316_캔사용내역조회DISTINCT오류수정.md
Normal file
16
docs/20260316_캔사용내역조회DISTINCT오류수정.md
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
# 20260316_캔사용내역조회DISTINCT오류수정.md
|
||||||
|
|
||||||
|
## 구현 목표
|
||||||
|
- `CanRepository.getCanUseStatus` 호출 시 발생하는 `java.sql.SQLException` (DISTINCT와 ORDER BY 충돌)을 해결한다.
|
||||||
|
|
||||||
|
## 작업 내용
|
||||||
|
- [x] `UseCanQueryDto.kt`에 `id: Long` 필드 추가
|
||||||
|
- [x] `CanRepository.kt`의 `getCanUseStatus` 쿼리 `select` 절에 `useCan.id` 추가
|
||||||
|
- [x] `CanServiceTest.kt`의 `UseCanQueryDto` 생성자 호출 로직에 `id` 추가
|
||||||
|
- [x] `./gradlew ktlintFormat` 실행 및 스타일 확인
|
||||||
|
- [x] `./gradlew test` 실행하여 검증
|
||||||
|
|
||||||
|
## 검증 결과
|
||||||
|
- 무엇을: 캔 사용 내역 조회 API
|
||||||
|
- 왜: `DISTINCT` 사용 시 `ORDER BY` 컬럼(`id`)이 `SELECT` 목록에 없어 발생하는 런타임 오류 해결
|
||||||
|
- 어떻게: `id`를 DTO에 포함시켜 `SELECT` 목록에 노출되도록 수정
|
||||||
@@ -91,6 +91,7 @@ class CanQueryRepositoryImpl(private val queryFactory: JPAQueryFactory) : CanQue
|
|||||||
return queryFactory
|
return queryFactory
|
||||||
.select(
|
.select(
|
||||||
QUseCanQueryDto(
|
QUseCanQueryDto(
|
||||||
|
useCan.id,
|
||||||
useCan.canUsage,
|
useCan.canUsage,
|
||||||
useCan.can,
|
useCan.can,
|
||||||
useCan.rewardCan,
|
useCan.rewardCan,
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ import kr.co.vividnext.sodalive.can.use.CanUsage
|
|||||||
import java.time.LocalDateTime
|
import java.time.LocalDateTime
|
||||||
|
|
||||||
data class UseCanQueryDto @QueryProjection constructor(
|
data class UseCanQueryDto @QueryProjection constructor(
|
||||||
|
val id: Long,
|
||||||
val canUsage: CanUsage,
|
val canUsage: CanUsage,
|
||||||
val can: Int,
|
val can: Int,
|
||||||
val rewardCan: Int,
|
val rewardCan: Int,
|
||||||
|
|||||||
@@ -145,9 +145,11 @@ class CanServiceTest {
|
|||||||
audioContentTitle: String? = null,
|
audioContentTitle: String? = null,
|
||||||
communityPostMemberNickname: String? = null,
|
communityPostMemberNickname: String? = null,
|
||||||
auditionTitle: String? = null,
|
auditionTitle: String? = null,
|
||||||
characterName: String? = null
|
characterName: String? = null,
|
||||||
|
id: Long = 1L
|
||||||
): UseCanQueryDto {
|
): UseCanQueryDto {
|
||||||
return UseCanQueryDto(
|
return UseCanQueryDto(
|
||||||
|
id = id,
|
||||||
canUsage = usage,
|
canUsage = usage,
|
||||||
can = can,
|
can = can,
|
||||||
rewardCan = rewardCan,
|
rewardCan = rewardCan,
|
||||||
|
|||||||
Reference in New Issue
Block a user