Skip to content

refactor(setting): 수신자 목록 ViewModel의 MVI 전환 #1805

Closed

Description

@OnlyReadOneBook

작업 유형

refactor — 동작 변경 없는 구조·책임·경계 개선

주 담당 모듈

setting — 설정

개요

설정 MVI 전환의 독립 잔여인 ReceiverListViewModel과 실제 소비 화면을 전환한다. InsertPasswordViewModel은 #1064 / PR #2005가 삭제하는 미사용 선언이므로 전환 대상에서 제외한다. 기존 11개 전체를 다시 작업 대상으로 잡지 않는다.

다른 이슈·PR에서 함께 구현한 범위

위 PR들은 열린 리뷰 대상이다. 각 구현·검증·머지는 해당 이슈와 PR에서 추적하며 이 이슈가 중복 구현하거나 대신 완료 처리하지 않는다.

남은 독립 범위

  • ReceiverListViewModel 및 실제 화면 소비처
  • 각 상태 전이를 순수 reducer로 이동하고 외부 입력은 onIntent 하나로 받는다.
  • 기존 목록 구독·재구독과 화면의 검색·선택 동작을 유지한다. 기존 ViewModel에 없는 오류·로딩·비밀번호 정책을 새로 추가하지 않는다.

MviViewModel과 ObserveSignal은 develop에서 이미 사용할 수 있다. 남은 ReceiverListViewModel은 #1502의 이벤트 스트림 흡수 대상이나 #1802의 온보딩 파일럿 소비처와 겹치지 않으므로 이 두 이슈를 전체 착수 차단으로 유지하지 않는다. 별도의 ObserveFlag helper를 전제로 새 의존성을 만들지 않는다. 실제 구현 전에 열린 담당 이슈·PR과 새로운 재작성 관계가 생겼는지 다시 확인한다.

완료 조건

  • ReceiverListViewModel이 MviViewModel을 상속하고 onIntent 단일 진입점을 사용한다.
  • 상태 변경은 reduce에서 처리하고 일회성 상태는 소비 Intent를 통해 해제한다.
  • 실제 Navigation 3 소비처를 새 계약에 맞추고 불필요한 공개 범위를 추가하지 않는다.
  • 전환한 ViewModel을 Konsist 예외 목록에서 제거한다. 다른 열린 PR이 이미 제거한 항목은 다시 작업하지 않는다.
  • 기존 동작과 오류·소비·중복 요청 경계를 회귀 테스트로 검증하고 관련 compile/ktlint를 통과한다.

자식 이슈

No response

참고

#1695 / #2173의 Navigation 3 entry와 같은 PR에서 최종 목록 MVI 소비를 구현한다. 단순 네비게이션 콜백 통합은 이 이슈 범위 밖이다. 실기기 QA가 필요한 변경이 새로 생기면 실제 변경 경계를 기준으로 검증 범위를 정한다.

2026-09-27 구현 순서 정정

#1429의 좁은 저장소 계약을 소비하고 #1695와 함께 PR #2173에서 완료합니다. ReceiverListViewModel의 단일 UiState, 순수 reducer, ObservationStarted/ObservationStopped 진입을 실제 Nav3 entry에 연결했습니다. 구독 전 요청 없음, 중복 구독 방지, 5초 유예, 재진입 최신 목록, 세션 경계 빈 목록을 회귀 검증합니다. #1502의 다른 ViewModel은 이 목록 전환의 선행이 아닙니다.

Activity

  1. added
    refactor동작 변경 없이 코드 구조·책임·경계를 개선하는 작업
    on Sep 3, 2026
  2. changed the title [-]refactor(setting): MVI 전환 — ViewModel 11개 + Channel 5개 흡수[/-] [+]refactor(setting): MVI 전환 — ViewModel 11개[/+] on Sep 3, 2026
  3. 7 remaining items

  4. github-actions commented on Sep 13, 2026

    @github-actions
    Contributor

    이 이슈를 맡은 PR 은 #2018 다 (base refactor/1502-setting-state-mvi).

    base 가 기본 브랜치(develop)가 아니라서 GitHub 은 이 이슈의 Development 칸에
    아무것도 표시하지 않는다. 본문에 Closes #N 이 있어도 마찬가지다 — 그 링크는 기본 브랜치를
    target 하는 PR 에서만 만들어진다.

    PR 이 닫히거나 머지되면 이 이슈의 pr-open 라벨은 다음 리컨사일에서 떨어진다.

  5. removed
    pr-open이 이슈를 구현하는 PR 이 열려 있다 — base 가 기본 브랜치가 아니어도 드러낸다
    on Sep 18, 2026
  6. github-actions commented on Sep 27, 2026

    @github-actions
    Contributor

    이 이슈는 필수 메타데이터를 판정할 수 없어 자동으로 닫았습니다.

    • 작업 유형이 없거나 허용된 값이 아닙니다.
    • 주 담당 모듈이 없거나 허용된 값이 아닙니다.

    이슈 등록 양식에 맞게 본문을 보완한 뒤 다시 열어 주세요.

  7. added
    pr-open이 이슈를 구현하는 PR 이 열려 있다 — base 가 기본 브랜치가 아니어도 드러낸다
    on Sep 27, 2026
  8. github-actions commented on Sep 27, 2026

    @github-actions
    Contributor

    이 이슈를 맡은 PR 은 #2173 다 (base refactor/1429-setting-repositories).

    base 가 기본 브랜치(develop)가 아니라서 GitHub 은 이 이슈의 Development 칸에
    아무것도 표시하지 않는다. 본문에 Closes #N 이 있어도 마찬가지다 — 그 링크는 기본 브랜치를
    target 하는 PR 에서만 만들어진다.

    PR 이 닫히거나 머지되면 이 이슈의 pr-open 라벨은 다음 리컨사일에서 떨어진다.

  9. removed
    pr-open이 이슈를 구현하는 PR 이 열려 있다 — base 가 기본 브랜치가 아니어도 드러낸다
    on Sep 27, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Labels

area:setting설정 기능 영역refactor동작 변경 없이 코드 구조·책임·경계를 개선하는 작업

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions