📄 이슈 내용
테마 선택 화면에서 포커스를 시작하고, 진행 세션 화면에서 종료할 때까지의 흐름을 실제 API로 연동한다. 테마는 서버와 주고받지 않고 기존 로컬 asset·localStorage 방식을 유지한다.
범위
POST /api/v1/focuses/start에 선택한 bookId를 보내 포커스를 시작한다.
- 시작 응답의
focusId, bookId, bookTitle, author, startedAt을 세션 화면 상태와 타이머 기준으로 사용한다.
POST /api/v1/focuses/end에 focusId, 선택 입력 page, isFinished를 보내 포커스를 종료한다.
- 종료 성공 시 포커스 메인으로 이동하고 홈 조회 데이터를 갱신한다.
- 시작·종료 중 중복 요청과 API 오류 상태를 처리한다.
범위 제외
- 테마 API 연동: 테마는 프론트 로컬 asset과 localStorage로만 관리한다.
- 도서 선택 화면 API 연동: #363에서 별도 진행한다.
- 진행 중 세션의 서버 복구: 현재 활성 세션 조회 endpoint가 없어 별도 백엔드 계약이 필요하다.
⚠️ 착수 전 확인 필요
- 시작 API는
bookId를 받으므로, 메인·도서 선택 화면에서 테마 선택 화면까지 선택 도서 ID를 일관되게 전달해야 한다.
- 새로고침·탭 재진입은 현재 서버 기반 복구를 지원할 수 없다. 같은 탭의 UI 상태 보존 범위만 별도 결정한다.
- API 오류 문구와 재시도 UX를 확인한다.
✅ 해야 할 항목 체크리스트
📄 이슈 내용
테마 선택 화면에서 포커스를 시작하고, 진행 세션 화면에서 종료할 때까지의 흐름을 실제 API로 연동한다. 테마는 서버와 주고받지 않고 기존 로컬 asset·localStorage 방식을 유지한다.
범위
POST /api/v1/focuses/start에 선택한bookId를 보내 포커스를 시작한다.focusId,bookId,bookTitle,author,startedAt을 세션 화면 상태와 타이머 기준으로 사용한다.POST /api/v1/focuses/end에focusId, 선택 입력page,isFinished를 보내 포커스를 종료한다.범위 제외
bookId를 받으므로, 메인·도서 선택 화면에서 테마 선택 화면까지 선택 도서 ID를 일관되게 전달해야 한다.✅ 해야 할 항목 체크리스트
src/api에 포커스 시작·종료 API 함수 작성src/hooks/mutations에 시작·종료 mutation 작성mockActiveFocusSession제거 및 시작 응답 기반 세션 상태 연결startedAt으로 교체