Skip to content

⚙️[기능추가][Todo] 할일·카테고리 API 백엔드 연동 #77

@EM-H20

Description

@EM-H20

📝 현재 문제점

  • Todo·Category 기능이 현재 SharedPreferences 기반 로컬 전용으로 동작하고 있어 디바이스 간 동기화·서버 백업이 되지 않는다.
  • 백엔드에서는 8개 엔드포인트(/api/todos 4개, /api/todo-categories 4개)가 이미 배포 완료되었으나, 프론트엔드에서는 Retrofit 클라이언트·Remote DataSource·통합 Repository 모두 미구현 상태.
  • TodoModel 의 JSON 직렬화가 snake_case (scheduled_dates, category_ids) 인 반면, 실제 API 계약은 camelCase (scheduledDates, categoryIds) 라서 바로 연결해도 동작하지 않는다.
  • docs/api-specs/02_todo.md 의 오류 코드(INVALID_TITLE, INVALID_DATE_FORMAT, 403 FORBIDDEN)가 실제 API (INVALID_INPUT_VALUE, TODO_NOT_FOUND 404 통일) 와 불일치 — Auth alignment 사이클과 같은 문서 정합화 필요.

🛠️ 해결 방안 / 제안 기능

  • Retrofit 기반 TodoRemoteDataSource 신설 — /api/todos 4개 + /api/todo-categories 4개 엔드포인트 매핑.
  • TodoModel·TodoCategoryModel 의 JSON 키를 camelCase 로 정렬해 서버 계약과 일치시킴.
  • 기존 LocalTodoDataSource 는 캐시 레이어로 재활용, TodoRepositoryImpl 합성 클래스를 신설해 Remote+Local 합성. 동기화 전략은 별도 spec 사이클에서 확정.
  • api_endpoints.dart/api/todos, /api/todo-categories 상수 추가.
  • 서버 응답 오류 코드(TODO_NOT_FOUND, CATEGORY_NOT_FOUND, TODO_ALREADY_EXISTS, CATEGORY_ALREADY_EXISTS, INVALID_INPUT_VALUE) 를 도메인 예외 또는 사용자 메시지로 매핑.
  • docs/api-specs/02_todo.mdapi-docs.json 최신 계약 기준으로 갱신 (Auth alignment 와 동일 패턴).
  • TDD 사이클로 진행 — 단위 테스트(매핑·예외) + 위젯 테스트(로딩·에러 상태) 동반.

⚙️ 작업 내용

  • 백엔드 API 명세 확인 및 api-docs.json 기준 도메인 계약 정리
  • Retrofit TodoRemoteDataSource 인터페이스 정의 + .g.dart 생성
  • TodoModel / TodoCategoryModel JSON 키 camelCase 정렬, 마이그레이션 코드 유지·검증
  • TodoRepositoryImpl 신설, LocalTodoRepositoryImpl 는 게스트/오프라인 폴백으로 분기
  • todo_provider.dart Provider 체인 갱신 (Remote DataSource → Repository → UseCase → Notifier)
  • 에러 envelope (ApiErrorResponse) → 사용자 메시지 매핑 (SpaceSnackBar 연동)
  • 02_todo.md 문서 최신 API 계약으로 갱신
  • 통합 후 회귀: 기존 category_map_screen, todo_add_bottom_sheet, category_add_bottom_sheet 흐름 그대로 동작 확인

🙋‍♂️ 담당자

  • 백엔드: 이수환 (이미 배포 완료)
  • 프론트엔드: 이수환
  • 디자인: -

Metadata

Metadata

Assignees

Labels

작업완료작업 완료 상태인 경우 (이슈 폐쇄)

Type

No type
No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions