Skip to content

#206까지 반영해 배포 - #207

Merged
1Seob merged 14 commits into
mainfrom
develop
Jul 28, 2026
Merged

#206까지 반영해 배포#207
1Seob merged 14 commits into
mainfrom
develop

Conversation

@1Seob

@1Seob 1Seob commented Jul 28, 2026

Copy link
Copy Markdown
Collaborator

📝 요약(Summary)

#206 까지 반영하여 운영 서버에 배포합니다.

🔗 Related Issue

  • Closes:

💬 공유사항

✅ PR Checklist

PR이 다음 요구 사항을 충족하는지 확인하세요.

  • PR 제목을 커밋 메시지 컨벤션에 맞게 작성했습니다.

1Seob and others added 14 commits July 10, 2026 14:54
* feat(report): 이전 리포트 목록 페이지네이션 응답 추가

GET /api/v2/monthly-report/all 응답을 페이지 객체로 변경하고 page, size 쿼리 파라미터를 추가함. 기존 통합 정렬 규칙은 유지하면서 전체 개수,
페이지 수, 이전/다음 페이지 여부를 함께 반환하도록 개선함

* test(report): 이전 리포트 페이지네이션 검증 추가

MonthlyReportQueryServiceV2Test에 첫 페이지와 마지막 페이지 메타데이터, MONTHLY 필터, 빈 결과, 잘못된 page/size 요청 검증을 추가함

* docs(report): 이전 리포트 조회 페이지네이션의 Swagger 설명 보완

GET /api/v2/monthly-report/all 문서에 type별 의미, page/size 규칙, 페이지 응답 필드 활용 방법, 정렬 순서, 상세 조회 라우팅 규칙을 보강함
GET /api/v2/monthly-report/all 응답 items에 createdAt을 추가하고, 월간 V1/V2 및 주간 리포트의 created_at 값을 매핑하도록 개선
GET /api/v2/monthly-report/all 응답의 createdAt 필드명을 유지하되 값을 analyzedAt으로 매핑해 실패 레코드 재사용 시 최초 생성 시각이
노출되지 않도록 수정
* feat(ai): Ask Chat 채팅 기록 저장 기반 추가

Ask Chat 세션과 메시지 저장을 위한 Flyway migration 및 JPA 엔티티 추가, 대화 상태와 메시지 역할/상태 enum 정의, LLM provider/model
및 토큰 사용량 기록 필드 추가

* feat(ai): Ask Chat repository 추가

AskChatSessionRepository와 AskChatMessageRepository를 추가해 세션 소유권 확인, 활성 세션 조회, 히스토리 목록 조회, 세션별 메시지 조회,
완료된 assistant 메시지 수 집계 지원

* feat(ai): Ask Chat 히스토리 조회 API 추가

AskChatHistoryController와 AskChatHistoryQueryService를 추가해 히스토리 목록 및 상세 조회를 지원하고, 세션 소유권 검증과
ASK_CHAT_SESSION_NOT_FOUND 오류 응답 처리 추가

* test(ai): Ask Chat 히스토리 조회 테스트 추가

AskChatHistoryQueryServiceTest를 추가해 히스토리 목록 pagination, 첫 사용자 메시지 제목 매핑, 상세 메시지 시간순 조회, 세션 소유권 실패,
잘못된 page/size 요청 검증

* feat(ai): Ask Chat RAG 문서 저장 기반 추가

ask_chat_rag_documents 테이블과 pgvector 기반 embedding 컬럼 및 HNSW 인덱스를 추가하고, RAG 문서
source/metadata/embedding 상태 관리를 위한 엔티티와 enum 추가

* feat(ai): Ask Chat RAG repository 추가

AskChatRagDocumentRepository와 AskChatRagVectorRepository를 추가해 RAG 문서 중복 조회, embedding 상태 갱신, 사용자 및
관심사 기준 pgvector 유사도 검색 지원

* feat(ai): Ask Chat RAG embedding 설정 추가

Ask Chat RAG용 embedding 설정과 Spring AI OpenAiEmbeddingModel 호출 래퍼를 추가해 embedding model/version 관리와
pgvector 저장용 벡터 변환 지원

* feat(ai): Ask Chat RAG indexing 서비스 추가

완료된 assistant 메시지를 RAG 문서로 저장하고 embedding 생성 후 pgvector 컬럼을 갱신하는 indexing 흐름 추가

* test(ai): Ask Chat RAG indexing 테스트 추가

AskChatRagIndexingService의 정상 색인, 비대상 메시지 스킵, 중복 version 스킵, embedding 실패 마킹, 메시지 미존재 예외 검증

* fix(infra): 테스트 DB에 pgvector 이미지 적용

Ask Chat RAG migration의 vector extension 사용으로 CI 테스트 Flyway migration이 실패하던 문제를 해결하기 위해
Testcontainers PostgreSQL 이미지를 pgvector/pgvector:pg16으로 변경
* feat(ai): 일간 답변 RAG 인덱싱 이벤트 처리 추가

DailyReportCompletedEvent에 answerEntryId와 reportId를 포함하고, 완료 트랜잭션 커밋 이후
AskChatRagIndexingEventListener에서 ANSWER_ENTRY 문서 embedding을 생성하도록 추가

* feat(ai): Ask Chat RAG embedding 재시도 정책 추가

FAILED embedding 문서를 스케줄러로 재시도하고, retry_count가 embedding-max-retry-count에 도달하면 DEAD_LETTER로 전환하도록 보강

* feat(admin): Ask Chat RAG 백필 실행 화면 추가

기존 완료 daily answer/report를 현재 embedding version 기준으로 batch 색인하는 backfill service를 추가하고, 관리자 페이지에서 한
batch씩 수동 실행할 수 있는 Ask Chat RAG 탭과 API를 추가함. backfill 결과는 targetCount, indexedCount, failedCount로 확인
가능하며 일부 실패 시 다음 대상 처리를 계속하도록 구성함

* test(ai): Ask Chat RAG 백필 통합 테스트 추가

backfill-batch-size 설정을 분리해 기존 데이터 이관 batch 크기를 별도로 조절하도록 하고, Testcontainers PostgreSQL 환경에서
backfill 대상 조회와 pgvector embedding 상태 갱신을 검증하는 통합 테스트를 추가함. 테스트 프로필에서는 embedding retry scheduler를
비활성화해 의도치 않은 외부 호출 가능성을 줄임
* feat(ai): Ask Chat 홈 세션 API 추가

GET /ask-chat/home은 활성 세션 조회만 수행하고, POST /ask-chat/sessions는 활성 세션 재사용 또는 신규 생성을 담당하도록 분리함

* feat(ai): Ask Chat 질문 저장 API 추가

POST /ask-chat/messages에서 활성 세션 재사용 또는 신규 세션 생성 후 USER 메시지를 저장하도록 구현함

* feat(ai): Ask Chat 히스토리 조회 계약 보강

USER 메시지가 있는 세션만 히스토리 목록에 노출하도록 조회 조건을 변경함

* test(ai): Ask Chat API 설명과 질문 검증 보강

Swagger 설명에 홈/채팅/히스토리 화면별 동작과 세션 생성 여부를 구체화함. AskChatMessageCommandService에서 질문 내용을 공백 제거 후 검증하도록
보강하고, 잘못된 입력이 세션 조회와 메시지 저장 전에 차단되는 테스트를 추가함
* feat(ai): Ask Chat 답변 생성 프롬프트 계약 추가

* feat(ai): Ask Chat RAG 답변 컨텍스트 조회 추가

* feat(ai): Ask Chat Spring AI 답변 생성 클라이언트 추가

* feat(ai): Ask Chat 질문 전송에 답변 생성 저장 연결

* feat(ai): Ask Chat 답변 근거 문서 매핑 저장

Ask Chat 답변 생성 성공 시 assistant message와 RAG document의 근거 관계를 ask_chat_message_references에 저장하도록 추가하고,
prompt augmentation 경계를 AskChatAnswerPromptAugmenter로 분리해 추후 Spring AI Advisor 전환 지점을 명확화함

* fix(ai): Ask Chat 답변 품질과 RAG 검색 오류 보정

Ask Chat 답변 프롬프트의 말투와 직전 질문 참조 규칙을 보강하고, 현재 질문 저장 전에 답변 컨텍스트를 생성하도록 순서를 조정함. RAG 검색에서 interestCode가
null일 때 PostgreSQL 파라미터 타입 추론에 실패하던 문제를 CAST(:interestCode AS VARCHAR)로 수정함

* refactor(ai): Ask Chat 답변 프롬프트 로더 분리

AskChatAnswerPromptLoader와 local/dev-prod 구현체를 추가하고, AskChatAnswerPromptComposer가 프롬프트 원문 대신 로더 템플릿
치환만 담당하도록 책임 분리

* feat(ai): Ask Chat 새 대화 시작 API 추가

POST /ask-chat/sessions/new에서 기존 ACTIVE 세션을 ENDED로 종료한 뒤 새 ACTIVE 세션을 생성하도록 추가

* ci(infra): Ask Chat 프롬프트 배포 환경변수 추가

dev/prod 배포 워크플로우에서 ASK_CHAT_ANSWER_SYSTEM_PROMPT_B64와 ASK_CHAT_ANSWER_USER_PROMPT_B64를 디코딩해 런타임 환경
변수로 주입하도록 추가

* feat(ai): Ask Chat 답변 생성 소요 시간 기록

ask_chat_messages에 generation_duration_ms 컬럼을 추가하고, ASSISTANT 메시지 저장 시 RAG 컨텍스트 구성부터 LLM 답변 생성까지의 소요
시간을 ms 단위로 저장하도록 추가
* feat(ai): Ask Chat 다중 세션 생성 계약 정리

POST /ask-chat/sessions 호출 시 기존 ACTIVE 세션을 재사용하거나 종료하지 않고 새 세션을 생성하도록 변경함. 홈 응답에서 단일 activeSession
개념을 제거하고, 기존 POST /ask-chat/sessions/new 엔드포인트와 restartSession 흐름을 삭제함

* feat(ai): Ask Chat 질문 전송 세션 지정 추가

AskChatQuestionRequest에 sessionId를 추가하고 POST /ask-chat/messages가 요청한 본인 세션에만 메시지와 답변을 저장하도록 변경함

* feat(ai): Ask Chat 세션 제한 도달 시 자동 종료

AskChatSession에 completeAnsweredTurn을 추가해 답변 성공 횟수가 세션 최대 횟수에 도달하면 ENDED로 자동 전환하도록 변경함

* feat(ai): Ask Chat 홈과 히스토리 세션 카드 보강

홈 응답에 recentSessions를 추가해 여러 채팅 세션을 최신 대화순으로 조회할 수 있도록 변경함. 히스토리 카드에 lastUserQuestion과
lastMessageAt을 추가하고, 세션 목록 정렬을 마지막 메시지 생성 시각 기준으로 변경함

* feat(ai): Ask Chat 답변 생성 실패 응답 분리

답변 생성 실패 시 FAILED assistant 메시지는 DB에 저장하되 API 응답의 assistantMessage는 null로 반환하도록 변경함.
answerGeneration 응답을 추가해 프론트가 success, errorCode, message를 기준으로 모달/토스트를 표시할 수 있게 함

* test(ai): Ask Chat 컨트롤러 계약 테스트 추가

Ask Chat 홈, 세션 생성, 질문 전송, 히스토리 조회 컨트롤러의 서비스 위임과 응답 DTO 계약을 검증하는 테스트를 추가함
* fix(report): 월간 리포트 직전 리포트 조회 기준 정렬

GET /api/v2/monthly-report의 previousReport가 바로 이전 달만 조회하던 동작을 현재 월 이전의 가장 최신 완료 리포트를 반환하도록 수정함

* fix(db): 관계 관심사 이름 마이그레이션 추가

* fix(report): 월간 리포트 V2 소셜 랭킹 동점 순위 추가

monthly_report_v2의 likeRanking/commentRanking 응답에 동점 처리가 반영된 rank 필드를 추가하고, displayOrder는 화면 배치 순서로
유지하도록 수정
daily_questions 추가 질문 215건을 Flyway seed 마이그레이션으로 반영하고, 명시 ID 삽입 이후 sequence를 MAX(id)에 맞춰 정렬
daily_questions 추가 시드 마이그레이션에서 명시 ID 삽입을 제거하고, 삽입 전 sequence를 현재 MAX(id)에 맞춰 개발 서버의 테스트 데이터와 PK 충돌하지
않도록 수정
* feat(ai): Ask Chat 대화권 지갑 저장 기반 추가

ask_chat_wallets와 ask_chat_wallet_logs 테이블을 추가해 무료/유료 대화권 잔액과 지갑 변동 이력을 분리 저장하도록 구현함

* feat(ai): Ask Chat 초기 무료 대화권 지급 연결

AskChatWalletGrantService를 추가해 신규 사용자에게 무료 대화권 3회를 지급하도록 구현함. 일반 가입, 신규 소셜 가입, 테스트 계정 생성 흐름에 초기 지급을
연결하고, 기존 사용자 보정을 위한 backfill migration과 지급 서비스 테스트를 추가함

* feat(ai): Ask Chat 대화권 충전 API 추가

30 크리스탈을 차감해 유료 대화권 10회를 충전하는 Ask Chat 충전 API와 서비스를 추가함. 크리스탈 차감 이력은 CrystalLog에, 대화권 충전 이력은
AskChatWalletLog에 각각 기록하고, 충전 후 크리스탈 및 대화권 잔액을 응답으로 반환하도록 구현함

* feat: Ask Chat 질문 전 대화권 부족 차단

질문 전송 시 메시지 저장과 AI 답변 생성 전에 AskChatTurnReservationService로 Ask Chat 대화권 잔액을 검증하도록 추가함

* feat(ai): Ask Chat 답변 결과에 따른 대화권 확정 처리

질문 전송 시 무료 대화권 우선으로 PENDING 예약 차감하고, 답변 생성 성공 시 예약 로그를 CONFIRMED로 확정하도록 구현함. AI 답변 생성 실패 시 예약 차감을
환불하고 ANSWER_FAILURE_REFUND 로그를 남겨 실패 응답에서 대화권이 차감되지 않도록 처리함

* chore(db): Ask Chat 지갑 migration 버전 갱신

Ask Chat 대화권 지갑 생성 및 초기 무료 대화권 backfill migration 파일명을 최신 Flyway 버전 기준으로 변경함

* feat(ai): Ask Chat 답변 프롬프트 v2 설정 적용

Ask Chat 답변 프롬프트 버전을 2로 올리고, 고도화된 프롬프트와 답변 길이에 맞춰 max-tokens 기본값을 900으로 조정함

* feat: Ask Chat 세션 생성 답변 수 조건 추가

POST /ask-chat/sessions에서 누적 답변 20개 이상인 사용자만 새 세션을 생성할 수 있도록 검증함
* chore(pdf): PDF 내보내기 의존성·전용 실행기·커밋 스코프 추가

openhtmltopdf-pdfbox 1.1.40(순수 JVM 서버 렌더링), twelvemonkeys imageio-webp 3.13.1(webp 디코드), AWS
CloudFront SDK(signed URL) 의존성 추가, 렌더 전용 스레드풀 pdfExportTaskExecutor, commitlint scope에 pdf 추가

* feat(pdf): pdf_export_jobs 테이블·엔티티·상태 전이 레포 추가

Flyway 마이그레이션 추가, PdfExportJob/Status/Type 엔티티·enum 추가, 리포지토리 메서드로 markCompleted·markFailed CAS 전이(IN_PROGRESS일 때만)·dedup 쿼리 추가, 크리스탈 로그 사유 PDF_EXPORT_GENERATE 추가

* feat(pdf): PDF 내보내기 과금·조회·다운로드 Service, Controller 추가

기간 조회 레포: 답변 BETWEEN+감정 조인, 리포트 overlap+COMPLETED, 월간 V1·V2, 카운트, 보상 트랜잭션, 다운로드 인프라에 UUID 키·CloudFront signed URL·업로드 시 파일명 각인·best-effort 삭제, 발급 rate-limit, api 5가지 구현, ErrorCode 8종·409/429 예외·핸들러, CloudFront config 및 ci 추가

* feat(pdf): 서버 렌더링 파이프라인·비동기 리스너 추가

openhtmltopdf XHTML 조립, Pretendard 임베드·감정 레이더(Java2D)·하이라이트/divider 오버샘플 PNG·사진 cover 정사각 리샘플, 비동기 리스너로 조회→렌더→S3 업로드→confirm, 실패 시 자동 환불, 개별 사진 실패는 스킵, 완료 이벤트 발행

* feat(notify): PDF 내보내기 완료 FCM 알림 추가

NotificationType.PDF_EXPORT_COMPLETED 추가, REPORT 그룹에 속하도록 하였고 딥링크 data는 jobId

* fix(pdf): 관심사 라벨 FE랑 불일치 문제 해결

백엔드 displayNameKo는 인간관계인데 실제 화면 상에서는 관계라 PDF에서만 변경

* test(pdf): 렌더 오케스트레이션·프리뷰 하네스 테스트 추가

리스너 오케스트레이션 테스트(조회→렌더→업로드→confirm/환불 경로), 디자인 프리뷰 하네스(합성 사진)

* perf(pdf): 반복 baked 에셋·답변 사진 asset: 서빙 + 렌더 동시성 max1

반복 baked 에셋(배너·divider·그림자·아이콘·로고·섹션)을 asset: 프로토콜로 1회 서빙하도록 변경, 답변 사진도 data URI → asset:photo-N 으로 전환(base64 인라인·재디코드 없이 raw 바이트 서빙), assemble 이 XHTML+사진 바이트맵(AssembledDocument) 반환, render 가 맵을 asset: 스트림으로 서빙, 렌더 동시성 max1(단일 렌더가 공유 힙을 거의 다 써 동시 2개면 OOM)

* test(pdf): 렌더 실측 하네스(peak·사진·공존 스윕 + PDF 덤프)

순수 JVM 하네스로 assemble→render 실경로로 peak heap·기간·사진수·공존 스윕 측정, pdfBench 태스크(-Xmx2g 기본,
-PbenchXmx/-PbenchCpu·-Dpdf.bench.*파라미터), 일반 test 는 bench 제외, 합성/실 webp 사진 소스, 시각 확인용 PDF
덤프(-Dpdf.bench.dumpPdf) 옵션

* feat(pdf): PDF 동시 생성 1개 제한·진행중 조회(/current)·이력 완료만 노출

유니크 인덱스 (user_id,type,start,end) → (user_id), 진행 중 다른 조건 재요청 409(PDF_EXPORT_ALREADY_IN_PROGRESS,
진행 중 jobId 반환), 같은 조건은 기존대로 무과금 재사용, GET /pdf-exports/current 추가, 아카이브(GET /pdf-exports)는 COMPLETED만 노출(생성중은 /current로 분리)

* perf(pdf): Pretendard GSUB 테이블 제거로 렌더 4배 (fontbox regex churn 소거)

fontbox 3.0.3가 라틴 런마다 GSUB 정규식을 재컴파일해서 GSUB만 삭제(GPOS·cmap·hmtx·family명 유지)

* test(pdf): JFR·GC·histogram 계측 + renderMode·fontDir 브라켓

-PbenchJfr(할당 프로파일)·-PbenchGcLog(churn/live 분리) 플래그, renderMode 변형(BAOS/파일 × 메모리/scratch)으로
A·scratch peak 델타 측정, histoAtMB 고수위 live class histogram, fontDir 폰트 A/B(GSUB 유무)·assetRequests 요청횟수
카운터

* perf(pdf): PDF 출력·PDFBox 문서모델 디스크 스트리밍으로 렌더 힙 감축

byte[] render() → Path render()로 변환, 렌더 실패 시 자기 임시파일 삭제 후 rethrow, RequestBody.fromFile로 스트리밍 업로드, 업로드 후 finally에서 로컬 임시파일 정리

* perf(pdf): 답변 사진 서브샘플 디코드로 assemble 속도·CPU 감축

webp를 풀디코드 후 축소하던 것을 ImageReader 서브샘플링으로 디코드 단계서 640²로 바로 받음

* perf(pdf): S3 다운로드 bounded 프리페치로 대기 숨김

다운로드를 전용 스레드 3개가 창 4장까지 앞서 받아두고 디코드는 호출 스레드가 순서대로 한 장씩 처리해 S3 대기를 디코드 뒤로 숨기도록 함

* test(pdf): 사진 단계분해·프리페치 A/B 계측 추가

사진 1장 단계분해 프로브, 프리페치 A/B 스위치, assemble/render 분리 출력, GC 종류 고정과 GC 로그 PID 분리

* feat(pdf): 생성 요청 대기 줄 상한으로 차감 전 조기 거부

렌더 대기가 20건 이상이면 start()에서 429로 거부, 실행기 큐는 40으로 늘려 상한이 항상 먼저 걸리도록 함

* feat(pdf): 멈춘 생성 작업 자동 환불 복구 스윕

60분 넘게 IN_PROGRESS인 작업을 5분마다 쓸어 실패 확정 + 환불, 서버 부하 가능성 때문에 렌더는 다시 돌리지X,  markFailed가 IN_PROGRESS일 때만 이기므로 두 번 쓸어도 이중 환불이 없음

* feat(pdf): 부팅 시 강제 종료가 남긴 렌더 임시파일 정리

정상·예외 경로는 렌더러가 스스로 정리하지만 SIGKILL·커널 OOM-kill 등은 못 잡음, 계속 쌓이면 메모리를 계속 차지하므로 부팅 시 한 번 쓸어주는 로직 추가

* test(pdf): 정합성 불변식·크래시 복구 실DB 검증 테스트

작업 상태와 크리스탈 로그 상태가 항상 짝이 맞는지, 잔액이 원장과 일치하는지 등  TestContainers Postgres 에서 확인

* feat(pdf): 답변 사진 전멸 시 실패 처리로 사진 없는 PDF 과금 차단

개별 사진 실패는 그 장만 스킵하는데 상한이 없어서 한 장도 성공하지 못한 경우는 job 을 실패시켜 기존 환불 경로를 태우는 로직 추가, 일부만 실패한 경우는 스킵으로 남김

* test(pdf): 조회·다운로드 거부 경로 검증 테스트 추가

검증 403(조회·발급), 진행 중 재요청 재사용/409, 발급 3단 가드(완료 전·만료·상한), 아카이브 COMPLETED만, 파일명, 발급 빈도 제한

* fix(db): PDF 작업 테이블 마이그레이션 버전을 develop 최신 뒤로 조정

* test(pdf): 트랜잭션 롤백 경계 검증 테스트 추가

예약·완료·환불 각 트랜잭션이 실제로 커밋·롤백되는지 비트랜잭션 테스트로 확인

* refactor(pdf): 테스트 정리와 주석·로그 보완

테스트 11건 제거(67→57), 알림 발행 실패가 완료를 실패로 기록하던 문제 수정, 실패·환불 로그 5종 추가와 장애 시 로그 폭주 억제, 어긋난 주석 정리

* fix(pdf): 다운로드 파일명 기획에 맞게 수정

나답_나에게답하다_(시작일)-(종료일).pdf → 나답_(시작일)-(종료일).pdf

* chore(pdf): 렌더 실측 하네스 제거

측정 완료로 역할이 끝나 PdfExportRenderBenchmark, PdfSyntheticData 와 pdfBench 태스크를 제거
* feat: Ask Chat 대화권 충전 비용 변경

Ask Chat 대화권 10회 충전에 필요한 크리스탈 비용을 30에서 200으로 변경하고, Swagger 설명과 응답 예시 및 관련 테스트 기대값을 함께 갱신

* refactor: Ask Chat 홈 응답 계약 정리

GET /ask-chat/home 응답을 홈 화면에 필요한 remainingMessageCount, nickname, crystalBalance, sampleQuestions
중심으로 재구성하고, 예시 질문을 ask_chat_sample_questions 테이블과 interests.code 기반 category 응답으로 관리하도록 정리

* refactor: Ask Chat 충전 응답 필드 축소

AskChatTurnChargeResponse에서 충전 수량, 차감 크리스탈, 무료/유료 대화권 세부 잔액을 제거하고 crystalBalance와
remainingMessageCount만 반환하도록 정리

* refactor: Ask Chat 세션 시작 응답 정리

POST /ask-chat/sessions에서 첫 질문 content를 함께 받아 새 세션 생성 후 AskChatMessageCommandService.sendQuestion
흐름을 재사용하도록 변경하고, AskChatSessionResponse에서 createdAt과 endedAt 제거

* refactor: Ask Chat 질문 전송 API 설명 보완

* refactor: Ask Chat 히스토리 목록 응답 축소

* fix: Ask Chat 히스토리 상세 readOnly 기준 보정

GET /ask-chat/histories/{sessionId} 응답의 readOnly를 고정값이 아닌 세션 상태와 answeredTurnCount 기준으로 계산하도록 수정

* chore(db): Ask Chat 예시 질문 마이그레이션 버전 수정

* refactor: Ask Chat 사용 조건 검증 위치 변경

누적 답변 20개 이상 조건을 POST /ask-chat/sessions가 아닌 GET /ask-chat/home에서 검증하도록 이동하고 Swagger 설명과 서비스 테스트를 갱신

* fix: Ask Chat 성공 답변 수 갱신 누락 수정

성공 답변 후 answeredTurnCount 갱신을 엔티티 dirty checking이 아닌 명시적 update query로 처리하고, 갱신된 세션을 재조회하도록 수정해 bulk
update 이후 세션 집계가 누락되는 문제를 보정
@1Seob
1Seob merged commit 44a9141 into main Jul 28, 2026
1 of 2 checks passed
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.

2 participants