Skip to content

fix: feedback과 최종 제출 꼬여있는 이슈 해결 - #22

Merged
hgeniee merged 1 commit into
mainfrom
feature/#17-fix
Jun 6, 2026
Merged

hgeniee merged 1 commit into
mainfrom
feature/#17-fix

Conversation

@hgeniee

@hgeniee hgeniee commented Jun 6, 2026 •

Copy link
Copy Markdown
Contributor

✨ 관련된 이슈

🙌 작업 내용

📸 스크린샷 (선택)

🤔 리뷰 요구사항(선택)

Summary by CodeRabbit

Release Notes

  • Documentation

    • Clarified interview answer API behavior: the save endpoint now only generates AI feedback without persisting answers to database.
    • Updated API documentation to specify that final answer storage occurs during submission.
  • Bug Fixes

    • Fixed answer response handling to return null for answer IDs when feedback-only mode is active.

@coderabbitai

coderabbitai Bot commented Jun 6, 2026 •

Copy link
Copy Markdown

PR changed again? Review this PR in Change Stack to compare snapshots and stay oriented.

Review Change Stack

Caution

Review failed

Pull request was closed or merged during review

📝 Walkthrough

Walkthrough

답변 저장 로직을 제거하고 AI 재평가 흐름으로 전환합니다. saveAnswer는 임시 피드백만 반환하며(answerId=null), generateReport에서 최종 제출 답변을 기반으로 피드백을 재생성합니다. API 계약, 서비스 의존성, 메서드 로직, 테스트가 함께 업데이트됩니다.

Changes

답변 피드백 흐름 리팩토링

Layer / File(s) Summary
API 계약 및 응답 타입 명세 업데이트
src/main/java/com/example/trouble_log/domain/interview/controller/InterviewController.java, src/main/java/com/example/trouble_log/domain/interview/dto/AnswerResponse.java
InterviewController의 saveAnswer 엔드포인트 @Operation 메타데이터를 "답변 저장 및 피드백 생성"에서 "답변 저장 없이 AI 피드백만 생성"으로 변경하고, AnswerResponse를 "현재 답변 AI 피드백 응답"으로 명시하며, answerId 필드에 nullable=true를 추가합니다.
서비스 의존성 재구성 및 저장소 제거
src/main/java/com/example/trouble_log/domain/interview/service/InterviewService.java (imports, dependencies)
InterviewAnswerRepository와 ObjectMapper를 제거하고, ProjectSessionRepository, AzureOpenAiPromptService, RadarScoreCalculator, AnalysisResultRepository를 주입 필드에 추가합니다.
saveAnswer 메서드 리팩토링: 저장 제거 및 임시 피드백 반환
src/main/java/com/example/trouble_log/domain/interview/service/InterviewService.java (saveAnswer logic)
saveAnswer에서 DB 저장 로직을 제거하고, promptService.evaluateAnswer의 결과(improvement/warning)만 정규화하여 answerId=null인 AnswerResponse로 즉시 반환합니다. null 또는 공백 답변은 피드백 없이 null을 반환합니다.
generateReport 메서드 리팩토링: 재평가 기반 피드백 생성
src/main/java/com/example/trouble_log/domain/interview/service/InterviewService.java (generateReport feedback list)
generateReport에서 DB 저장된 피드백 파싱 방식을 제거하고, 제출된 최종 답변을 기반으로 promptService.evaluateAnswer를 재호출하여 피드백 목록을 구성합니다. 유효한 점수를 가진 항목만 필터링하여 레이더 점수 및 분석 결과를 생성합니다.
테스트 설정 및 검증 범위 업데이트
src/test/java/com/example/trouble_log/domain/interview/service/InterviewServiceTest.java
setUp에서 의존성 주입을 조정하고 저장 기반 스텁을 제거한 뒤, saveAnswer의 answerId=null 검증을 추가하고, generateReport의 레이더 점수 계산을 검증하는 새로운 테스트를 추가합니다. 테스트 객체 생성을 위한 헬퍼 메서드를 추가합니다.

Sequence Diagram

sequenceDiagram
  participant Client
  participant InterviewController
  participant InterviewService
  participant PromptService
  participant RadarCalculator
  participant DB as Repository

  rect rgba(200, 220, 255, 0.5)
    Note over Client,DB: 답변 임시 저장 (saveAnswer)
    Client->>InterviewController: POST /answers (sessionId, questionId, answerText)
    InterviewController->>InterviewService: saveAnswer(...)
    InterviewService->>PromptService: evaluateAnswer(question, answerText)
    PromptService-->>InterviewService: AnswerFeedbackResult (improvement, warning)
    InterviewService-->>InterviewController: AnswerResponse (answerId=null)
    InterviewController-->>Client: 200 OK
  end

  rect rgba(220, 255, 200, 0.5)
    Note over Client,DB: 최종 제출 (generateReport)
    Client->>InterviewController: POST /submit
    InterviewController->>InterviewService: generateReport(submitAnswers)
    loop 각 질문마다
      InterviewService->>PromptService: evaluateAnswer(question, finalAnswerText)
      PromptService-->>InterviewService: AnswerFeedbackResult
    end
    InterviewService->>RadarCalculator: calculate(feedbackList)
    RadarCalculator-->>InterviewService: RadarScore
    InterviewService->>DB: save(AnalysisResult)
    InterviewService-->>InterviewController: GenerateReportResponse
    InterviewController-->>Client: 200 OK
  end
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Possibly related PRs

  • TroubleLog/TroubleLog-server#15: 인터뷰 답변 저장 및 answerId 반환 여부의 직접적인 선행/후속 수정으로, saveAnswer의 저장 로직과 응답 구조 변경이 함께 다루어집니다.
  • TroubleLog/TroubleLog-server#18: generateReport에서 답변 피드백 구성 방식(DB 파싱 → 재평가) 및 레이더 점수 계산 흐름이 직접적으로 관련됩니다.
  • TroubleLog/TroubleLog-server#21: saveAnswer의 improvement 정규화 로직(null/공백 시 기본값 치환)과 직접 겹치는 값 처리 규칙 변경입니다.

Poem

🐰 답변을 저장하지 않고 피드백만 가볍게 담아,
최종 제출 때 다시 평가하는 지혜로운 변화.
임시와 최종의 흐름이 명확해지니,
레이더 점수도 정확해지는 마법! ✨

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 14.29% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed PR 제목이 변경사항의 핵심을 명확하게 설명합니다. 피드백 생성과 최종 제출 로직이 혼재된 문제를 해결한다는 의도가 분명합니다.
Linked Issues check ✅ Passed PR은 API 테스트 후 발견된 실질적인 버그를 수정하고 Swagger 문서를 개선했습니다. 이는 #17 이슈의 요구사항과 완벽하게 일치합니다.
Out of Scope Changes check ✅ Passed 모든 변경사항이 피드백 생성과 최종 제출 로직 분리라는 범위 내에 있으며, 연관된 Swagger 문서 업데이트도 포함됩니다.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feature/#17-fix

Comment @coderabbitai help to get the list of available commands and usage tips.

@hgeniee
hgeniee merged commit 53fd485 into main Jun 6, 2026
1 of 2 checks passed
@hgeniee
hgeniee deleted the feature/#17-fix branch June 6, 2026 16:22
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[fix]: api 테스트 후 수정사항

1 participant