Skip to content

[Feat] TimerSyncWorker 추가 #588

Description

@edv-Shin

어떤 기능인가요?

전송 대기 상태의 타이머를 서버로 올리는 워커를 추가합니다. 앱이 종료되거나 기기가 재부팅돼도 연결 조건이 충족되면 실행됩니다.

  • FcmTokenSyncWorkerFcmTokenSyncScheduler 패턴을 그대로 씁니다. Hilt Worker 배선(Configuration.Provider, HiltWorkerFactory)은 이미 있습니다
  • 연결 상태 제약과 지수 백오프, 유니크 작업으로 예약해 같은 작업이 동시에 두 번 돌지 않게 합니다
  • 생성이 성공하면 응답의 id를 serverId에 기록하고 동기화 완료로 바꿉니다
  • 재시도에도 같은 createRequestId를 보냅니다. 중복 생성은 서버 멱등 처리가 막습니다
  • 수정이 409(충돌)로 거절되면 로컬을 서버가 돌려준 현재 값으로 갱신하고 동기화 완료로 처리합니다
  • 서버 작업 2건(타이머 updatedAt 충돌 검사, 생성 멱등 처리)이 prod에 배포된 뒤에 머지합니다. 그 전에 열면 중복 생성과 덮어쓰기가 실제로 일어납니다

작업 상세 내용

  • TimerSyncWorker와 스케줄러 인터페이스 추가 (연결 제약, 지수 백오프, 유니크 작업)
  • 생성 성공 시 serverId 기록 후 동기화 완료 전이
  • 409 수신 시 로컬을 서버 값으로 갱신 후 동기화 완료 처리
  • 재시도에 같은 createRequestId 사용
  • 전송 작업 테스트 (대기에서 완료까지 전이, 실패 시 재시도)
  • 오프라인 생성 3건 후 연결 복구 시 서버에 정확히 3건, 중복 없음 수동 확인
  • 오프라인에서 생성 후 수정 후 삭제, 연결 복구 시 서버에 아무것도 남지 않는지 수동 확인

참고할만한 자료(선택)

오프라인 1단계 디자인 문서의 구성 요소 3(TimerSyncWorkManager)과 위험 요소 2 기준입니다. 타이머 로컬 원본·화면 전환 이슈와 api-server의 타이머 updatedAt·멱등 이슈(prod 배포)가 선행입니다.

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