-
Notifications
You must be signed in to change notification settings - Fork 0
Description
이슈 배경
- 사용자가 채팅방에 입장했을 때 대화 내용 최신순으로 제공
- 스크롤을 올릴 때 과거 데이터 로딩은 무한 스크롤 방식으로 제공
이슈 내용
- Endpoint:
GET /v1/chats/{chatId} - Request:
- Path Variable:
chatId - Query Param:
lastId(No-Offset 페이징을 위한 마지막 메시지 ID, 첫 조회 시null),size(페이지 크기)
- Path Variable:
- Response:
ChatHistoryResmessages: 최신순으로 정렬된 메시지 리스트.hasNext: 다음 페이지(더 과거의 데이터) 존재 여부.
{ "success": true, "status": "OK", "message": "채팅 기록 조회 완료", "data": { "messages": [ { "id": 11, "content": "AI 답변입니다", "type": "AI", "feedback": "NONE" }, { "id": 10, "content": "Spring Boot 관련 질문", "type": "USER" } ], "hasNext": true, "lastId": 10 } }
2. 개발 범위
ChatController: 채팅방 ID와 페이징 파라미터(lastId,size)를 받아 조회 요청을 핸들링함.ChatFacade:ChatService를 통해 접근 권한(본인 소유)을 검증함.MessageService를 호출하여 페이징된 메시지 목록을 조회하고 DTO로 변환함.
MessageQueryService:MessageRepository를 사용하여lastId보다 작은 ID를 가진 메시지를 조회함.- 정렬 기준:
createdAt내림차순 (최신 -> 과거).
MessageRepository:- No-Offset 방식의 쿼리 메서드을 활용하여 성능을 최적화한 페이징 조회를 구현함.
3. 데이터 구조 및 매핑
- 정렬: 최신 대화가 상단에 오도록 내림차순(DESC)으로 반환함.
- 피드백 필드:
AI타입 메시지:feedback상태(LIKE,DISLIKE,NONE) 포함.USER타입 메시지:feedback필드 제외(또는null처리).
4. 테스트 작성
- Integration Test:
- 첫 페이지 조회 시 최신 메시지가 반환되는지 검증함.
lastId를 통한 다음 페이지 조회 시 끊긴 시점의 과거 데이터가 이어져서 나오는지 확인함.
- Unit Test: Repository의 페이징 쿼리 동작 및 AI/USER 타입별 필드 매핑 로직 테스트.
참고 자료
No response
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels