Skip to content

일정의 온라인 저장과 재로그인 복구를 일관되게 처리한다 - #211

Merged
OnlyReadOneBook merged 7 commits into
mainfrom
feat/204
Sep 6, 2026
Merged

OnlyReadOneBook merged 7 commits into
mainfrom
feat/204

Conversation

@OnlyReadOneBook

@OnlyReadOneBook OnlyReadOneBook commented Sep 6, 2026 •

Copy link
Copy Markdown
Owner

📌𝘐𝘴𝘴𝘶𝘦𝘴

📎𝘞𝘰𝘳𝘬 𝘋𝘦𝘴𝘤𝘳𝘪𝘱𝘵𝘪𝘰𝘯

연결이 끊긴 상태의 일정 변경은 연결 안내로 끝나고, 생성·편집 입력과 재시도를 유지합니다. 생성·편집·삭제·완료는 서버 확인 후 성공으로 처리하는 transaction으로 통일했으며, 새 일정은 제출 전에 만든 ID로 재시도합니다. 같은 요청의 늦은 성공은 기존 문서를 보존해 반환하고, 다른 내용은 목록에서 확인하도록 안내합니다.

완료 실패는 임시 표시를 복구하되 새 서버 목록과 새 로그인 세대의 상태를 덮지 않습니다. 완료·시간표 화면은 로그아웃 시 이전 목록을 비우고, 같은 날 재로그인해도 구독을 다시 시작합니다. 공유 등록부와 기존 편집의 부분 갱신 계약을 유지했습니다. 온라인 쓰기 계약은 새 앱 버전에 적용하며, 구버전 앱의 기존 오프라인 대기열을 제거하지 않습니다.

📷𝘚𝘤𝘳𝘦𝘦𝘯𝘴𝘩𝘰𝘵

기존 오류 카드에 연결 필요·기존 일정 확인 안내를 사용합니다. 화면 배치 변경은 없습니다.

💬𝘛𝘰 𝘙𝘦𝘷𝘪𝘦𝘸𝘦𝘳𝘴

  • Kotlin 단위 테스트 164개 통과: :core:data 59, :feature:addschedule 30, :feature:main 75.
  • 실제 Firestore emulator 62개 통과. 로컬 TCP 연결 차단·복구 후 쓰기 실패와 재시도, 기존 문서 보존을 확인했습니다. Android Repository/화면 경계는 Kotlin 테스트로 별도 검증했습니다.
  • 영향 모듈 ktlint, :app:assembleDebug, :app:lintDebug 통과. 문서의 로컬 링크·앵커 검사와 git diff --check도 통과했습니다.
  • 입력과 ID의 복원 범위는 Android가 같은 task를 시스템 복원하는 경우입니다. 강제 종료·최근 앱 제거·재부팅 뒤까지 보관함을 보장하지 않습니다. 이미 전송된 commit을 코루틴 취소로 철회할 수 없어 같은 ID 재시도가 필요합니다.
  • 운영 규칙은 미배포이며 운영 registry inventory·충돌 정리는 미확인입니다. 기존 등록부 점검·충돌 정리 → 새 규칙 적용 → 새 앱의 생성·편집·삭제·완료·공유 기기 검증 순서로 전환해야 합니다. 구버전 잔존 여부와 기존 오프라인 요청의 재연결 결과도 출시 판정에 포함합니다.
  • #207을 main에서 통합했습니다. 저장된 서버 모델로 알람을 예약하고, 예약 실패 재시도는 원격 저장을 반복하지 않습니다. 예약 실패 뒤 시스템 복원에서도 같은 제출 ID를 사용하는 경계를 검증했습니다.

공식 근거: Firestore transactions, SavedStateHandle, Task.await.

Refs #204

일정 변경을 transaction으로 처리하고 서버 확인 후 알람을 처리한다. 신규 제출 ID와 입력을 SavedStateHandle에 보존하고 완료 실패의 임시 표시를 복구한다.

검증: 실제 TCP 단절 emulator 포함 62개, Kotlin data44/add26/main54, 영향 ktlint 및 app assembleDebug/lintDebug 통과.

Sources: https://firebase.google.com/docs/firestore/manage-data/transactions https://developer.android.com/topic/libraries/architecture/viewmodel/viewmodel-savedstate https://kotlinlang.org/api/kotlinx.coroutines/kotlinx-coroutines-play-services/kotlinx.coroutines.tasks/await.html
완료·시간표의 재로그인 구독과 이전 완료 응답 경계를 보완한다. Kotlin 159개, Firestore emulator 62개 및 영향 lint/build 검증 통과.

Sources: https://firebase.google.com/docs/firestore/manage-data/transactions https://developer.android.com/topic/architecture/ui-layer
Linux CI가 TCP reset 뒤 반환한 cancelled와 로컬 unavailable만 허용한다. 네 쓰기의 실패와 연결 복구 후 대기열 재생 없음, 기존 문서 보존 단언은 유지했다. Emulator 62개 통과.

Source: https://grpc.io/docs/guides/status-codes/
main #207의 pending 알람 재시도를 보존하고 서버 Schedule을 그대로 전달한다. 예약 후처리 취소를 전파하며 시스템 복원 뒤 같은 ID 사용을 검증했다. Kotlin 164개와 영향 ktlint, assembleDebug, lintDebug 통과.

Sources: https://firebase.google.com/docs/firestore/manage-data/transactions https://developer.android.com/topic/libraries/architecture/viewmodel/viewmodel-savedstate
새 앱 계약이 구버전 오프라인 큐를 제거하지 않는 점과 운영 미배포·inventory 미확인 상태를 기록한다. 등록부 충돌 정리, 규칙 적용, 새 앱 검증의 순서를 분명히 했다. Markdown 링크 13개 문서 검사와 diff check 통과.

Sources: https://firebase.google.com/docs/firestore/manage-data/transactions https://firebase.google.com/docs/firestore/security/rules-conditions
@OnlyReadOneBook
OnlyReadOneBook merged commit 867e018 into main Sep 6, 2026
16 of 17 checks passed
@OnlyReadOneBook
OnlyReadOneBook deleted the feat/204 branch September 6, 2026 08:57
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.

fix: 연결이 끊겼을 때 일정 쓰기와 재시도 상태를 일관되게 처리한다

1 participant