Skip to content

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

Merged
edv-Shin merged 1 commit into
devfrom
feat/timer-local-source-586
Sep 6, 2026
Merged

[Feat] 타이머를 로컬 원본으로 전환 #586#600
edv-Shin merged 1 commit into
devfrom
feat/timer-local-source-586

Conversation

@edv-Shin

@edv-Shin edv-Shin commented Sep 6, 2026

Copy link
Copy Markdown
Contributor

#️⃣연관된 이슈

Closes #586

📝작업 내용

타이머의 원본을 기기로 옮기는 저장층입니다. 화면 전환은 #587에서 합니다.

테이블 두 개를 추가하고 DB 버전을 2로 올렸습니다. simple_timercustom_timer이고 둘 다 memberIdlocalId가 PK, serverId는 nullable입니다. 커스텀 타이머의 스텝은 JSON 컬럼에 담았습니다. 스텝만 따로 조회할 일이 없고 서버 수정이 전체 교체라 타이머 하나가 판정 단위입니다. 스텝에 서버 ID는 담지 않았습니다. PUT 왕복에서 유지된다는 보장이 없습니다.

TimerLocalDataSource가 계정 조건과 상태 전이를 담당합니다.

  • 생성은 CREATE_PENDING, createRequestId 발급
  • 생성 대기 행을 고치면 생성 대기를 유지합니다. 수정 대기로 바꾸면 서버에 없는 항목에 수정 요청이 나갑니다
  • 생성 대기 행을 지우면 즉시 삭제, 서버에 있는 행은 DELETE_PENDING으로 표시만 합니다
  • 조회와 개수 판정에서 삭제 대기 행을 뺍니다. 최대 6개 제한에 삭제 대기가 끼면 안 됩니다

TimerRepositoryImpl의 성공 폴백 두 개를 걷었습니다. addSimpleTimer-1L을, getCustomTimer가 빈 CustomTimer를 성공으로 돌려주고 있었습니다. 로컬이 원본이 되면 그 값이 저장돼 복구할 수 없는 행이 됩니다. 이제 MAPPING_ERROR로 떨어집니다.

테스트 12건을 붙였습니다. 상태 전이 5건, 개수와 정렬 2건, 커스텀 스텝 2건, 대기 행 조회 1건, 계정 경계 2건입니다. :data:testDebugUnitTest 41건과 :app:assembleDebug 통과입니다.

#599 위에 쌓았습니다. 버전을 올리는 변경이라 그 PR의 재생성 정책이 선행입니다.

스크린샷 (선택)

화면 변화가 없습니다. 저장층만 추가했습니다.

💬리뷰 요구사항(선택)

커스텀 타이머 스텝을 별도 테이블이 아니라 JSON 컬럼으로 뒀습니다. 스텝 단위 조회나 정렬이 필요해지면 테이블 분리로 바꿔야 합니다. 지금 판단이 맞는지 봐주세요.

전송 중 스냅샷 컬럼(inFlightEditId 등)은 넣지 않았습니다. 워커가 쓸 값이라 #588에서 추가합니다. 출시 전이라 스키마를 다시 바꿔도 비용이 없습니다.

CI

dev-ci는 base가 dev인 PR에만 돕니다. 이 PR은 스택이라 검사가 붙지 않습니다. 로컬에서 ktlintCheck, :data:testDebugUnitTest 41건, :app:assembleDebug를 돌렸습니다. 부모 PR이 머지되면 base를 옮겨 CI를 태우겠습니다.

@edv-Shin edv-Shin self-assigned this Sep 6, 2026
@edv-Shin
edv-Shin changed the base branch from chore/room-schema-recreate-598 to dev September 6, 2026 17:37
@edv-Shin edv-Shin closed this Sep 6, 2026
@edv-Shin edv-Shin reopened this Sep 6, 2026
@edv-Shin
edv-Shin merged commit 9cf04a4 into dev Sep 6, 2026
1 check passed
@edv-Shin
edv-Shin deleted the feat/timer-local-source-586 branch September 6, 2026 18:13
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

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

1 participant