Skip to content

[Feat] 타이머를 로컬 원본으로 전환 #586

Description

@edv-Shin

어떤 기능인가요?

타이머(심플·커스텀)의 원본을 기기로 옮기는 저장층입니다. 오프라인 생성을 지원하려면 기기가 원본이어야 합니다. 화면 전환은 별도 이슈에서 다룹니다.

  • Entity에 syncState(생성 대기, 수정 대기, 삭제 대기, 동기화 완료), serverId, createRequestId(UUID), localEditedAt을 둡니다
  • 연산을 쌓지 않고 행마다 현재 상태만 둡니다. 오프라인에서 여러 번 고쳐도 전송은 마지막 상태 한 번입니다
  • 삭제는 행을 바로 지우지 않고 삭제 대기로 표시합니다. 바로 지우면 서버에 삭제를 알릴 방법이 없습니다
  • 서버에 없는 행(생성 대기)을 수정하면 생성 대기를 유지하고, 지우면 즉시 삭제합니다. 수정 대기로 바꾸면 전송이 서버에 없는 항목에 수정 요청을 보냅니다
  • createRequestId는 행 생성 시 발급해 저장하고 재시도에도 같은 값을 보냅니다 (서버 멱등 처리의 키)
  • localEditedAt은 로컬 정렬과 전송 순서에만 씁니다. 충돌 판정은 서버 시각만 씁니다

작업 상세 내용

  • 심플·커스텀 타이머 Entity와 DAO (memberId 계정 조건 포함)
  • syncState 전이 규칙 구현
  • 행 생성 시 createRequestId UUID 발급·저장
  • 상태 전이 테스트 (서버 id 없는 행을 수정·삭제했을 때 수정·삭제 API가 호출되지 않는지)

참고할만한 자료(선택)

오프라인 1단계 디자인 문서의 원본 데이터 위치와 동기화 전략(로컬에서 서버로) 절 기준입니다. Room 골격 이슈가 선행입니다.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions