From 1186f810c15fecb2d6ee2c28465c77aaebf29e53 Mon Sep 17 00:00:00 2001 From: jmj Date: Fri, 21 Aug 2026 00:50:45 +0900 Subject: [PATCH] =?UTF-8?q?fix(backend):=20=EC=82=AD=EC=A0=9C=ED=95=9C=20?= =?UTF-8?q?=EC=84=B8=EC=85=98=EC=9D=B4=20=ED=86=B5=EA=B3=84=C2=B7=EC=A0=90?= =?UTF-8?q?=EC=88=98=20=EC=B6=94=EC=9D=B4=EC=97=90=20=EA=B3=84=EC=86=8D=20?= =?UTF-8?q?=EC=9E=A1=ED=9E=88=EB=8D=98=20=EB=AC=B8=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit UserStatsService 의 총/완료 세션 수는 countByUser_IdAndDeletedFalse 로 삭제 세션을 빼는데, 같은 응답의 평균 점수 4종과 최근 점수 추이는 필터가 없었다. 그래서 기록을 지우면 "완료 3회"인데 추이 그래프엔 점이 5개 찍히는 식으로 같은 화면 안에서 숫자가 어긋난다. 무엇보다 사용자가 '기록 삭제'로 기대하는 것은 그 세션이 통계에서도 사라지는 것이다. 이 원칙은 이미 코드에 있다 — getByToken 은 세션이 삭제되면 공유 토큰이 남아 있어도 404 를 준다("'기록 삭제'로 기대하는 것은 공유 링크까지의 소멸"). InterviewMessageRepository 도 m.session.deleted = false 로 거른다. 통계 쿼리만 그 원칙에서 빠져 있었다. 5개 쿼리(평균 4 + 최근 목록)에 f.deleted / f.session.deleted 필터를 추가했다. findSharedByOwner 는 일부러 두었다 — 회원 탈퇴 시 공유 토큰을 회수하는 용도라 삭제된 세션의 토큰도 같이 회수해야 한다. 실 DB(로컬 Postgres) 로 수정 전/후를 확인했다. 수정 전에는 삭제한 세션의 피드백이 그대로 조회된다(Expected size: 1 but was: 2). --- .../session/domain/SessionFeedbackRepository.java | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/backend/src/main/java/com/stackup/stackup/session/domain/SessionFeedbackRepository.java b/backend/src/main/java/com/stackup/stackup/session/domain/SessionFeedbackRepository.java index e40afd7..d87de4f 100644 --- a/backend/src/main/java/com/stackup/stackup/session/domain/SessionFeedbackRepository.java +++ b/backend/src/main/java/com/stackup/stackup/session/domain/SessionFeedbackRepository.java @@ -18,9 +18,15 @@ public interface SessionFeedbackRepository extends JpaRepository findRecentByOwner(@Param("userId") Long userId, Pageable pageable); @@ -28,24 +34,32 @@ public interface SessionFeedbackRepository extends JpaRepository