Skip to content

fix(timeletter): 목록·상세 ViewModel 저장소 조회 6곳의 취소 전파를 보존한다 (#1501 분리) #2041

Open

Description

@1hyok

작업 유형

bug — 버그·오동작

주 담당 모듈

timeletter — 타임레터

개요

#1501 합본에서 타임레터 presentation의 저장소 suspend 조회를 stdlib runCatching으로 감싸 취소를 일반 실패로 소비하는 잔여를 분리한다. 설정은 #1501에서 완료한다. 이미 해결된 호출과 동기 코드까지 다시 치환하지 않는다.

현재 잔여 6곳

실측 기준 develop의 93e983fe1ea9c813a8673a7c59e401a5ea40aabc. 경로 접두사는 feature/timeletter/presentation/src/main/kotlin/com/afternote/feature/timeletter/presentation/viewmodel/다.

파일 현재 줄 저장소 호출
TimeletterViewModel.kt 63·64 getReceivers(async)·getTimeLetters
TimeLetterDetailViewModel.kt 51·52 getReceivers(async)·getTimeLetter
RecipientTimeletterViewModel.kt 40 getReceivedTimeLetters
RecipientTimeLetterDetailViewModel.kt 47 getReceivedTimeLetterDetail

원래 #1501의 4f5e54689 표에는 임시보관함 3곳까지 타임레터 9곳이었다. 현재 DraftLetterViewModel의 조회·선택 삭제·전체 삭제는 명시적인 CancellationException 재던짐을 이미 사용한다. TimeletterViewModel.deleteTimeLetter와 작성기의 조회/수정도 현재 취소 보존 helper를 사용하므로 이 수정의 추가 대상이 아니다. 기존 임시보관함 finally의 busy 정리는 유지한다.

현재 PR과의 관계

보존할 동작과 완료 조건

취소 이후 onFailure/비-suspend 후속 처리가 실행될 수 있다는 #1501의 문제 정의를 유지한다. 보조 수신자 조회의 일반 실패 fallback은 계속 허용하되 취소를 빈 이름 맵·UI Error로 바꾸지 않는다. 기존 재조회·성공·실패 정책을 새로 결정하지 않는다.

  • 위 6개 실제 저장소 suspend 호출에 core:common의 기존 runCatchingCancellable 또는 동등한 취소 재던짐 계약을 적용한다. 착수 시 최신 PR에서 선반영됐으면 그 부분은 재작성하지 않는다.
  • 대상 목록·상세 ViewModel에서 취소된 로드가 실패 상태·진단·이벤트 등 일반 실패 후속 처리를 실행하지 않는 회귀 테스트를 둔다. async 보조 조회의 취소와 일반 조회 실패 fallback을 구분한다.
  • 해당 변경이 닿는 기존 성공/일반 실패·재진입 상태 보존 테스트를 유지하고 관련 단위 테스트·ktlint·앱 소비 컴파일을 통과한다.
  • LocalDate.parse, ContentResolver 조회, JSON 직렬화 등 동기 runCatching은 기계적으로 바꾸지 않는다. 데이터/첨부 IO 계층·새 retry 정책·새 상태 계층은 범위 밖이다.

참고

Activity

  1. github-actions commented on Sep 13, 2026

    @github-actions
    Contributor

    bug 이슈는 사이드바 Fields > Priority 로 심각도를 지정해야 합니다. 판정 기준:

    • Urgent: 치명 — 크래시·데이터 소실·보안 무력화·핵심 경로 차단·가짜 성공
    • High: 심각 — 실패·틀린 값의 정상 위장, 핵심 기능 무동작
    • Medium: 불편 — 우회로가 있는 오동작·틀린 표시, 핵심 흐름은 유지
    • Low: 경미 — 문구·정렬·마감 품질 흠, 기능 영향 없음

    값이 비어 있어도 이슈를 닫지는 않습니다. 이 안내는 이슈당 한 번만 답니다.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

area:timeletter타임레터 기능 영역bugSomething isn't working

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions