Skip to content

모든 기록 내려받기 data 계층 미구현 — 스텁이 성공만 반환해 사용자에게 성공으로 보임 #589

Closed as not planned
1 of 1 issue completed

Description

@OnlyReadOneBook

📜 Overview (Required)

"모든 기록 내려받기" 의 data 계층이 스텁이라 실제로는 아무 일도 하지 않습니다. 화면·ViewModel·도메인 인터페이스는 모두 연결돼 있어 사용자에게는 성공한 것처럼 보입니다.

ReceiverRepositoryImpl

  • downloadReceivedExport() → 서버 호출 없이 빈 ReceivedExportBundle() 을 success 로 반환
  • saveReceivedExportToFile(bundle) → 파일 쓰기 없이 Unit 을 success 로 반환

호출부는 두 곳입니다 — 수신자 홈(ReceiverHomeViewModel), 내려받기 화면(ReceiverDownloadAllViewModel).

선행 조건: 서버에 해당 엔드포인트가 없습니다. BE 실측(release 브랜치) 결과 수신자 컨트롤러는 ReceivedController(목록 조회 4개)와 ReceiverAuthController 뿐입니다. Afternote-BE #90 으로 요청해 둔 상태이고, 응답 형태(단일 JSON vs zip)와 포함 범위가 확정돼야 구현 가능합니다.

📌 Child Issue(Optional)

No response

📍 Note (Optional)

현재 ReceivedExportBundle(payloadJson: String = "{}")는 확정 서버 계약이 아닙니다. JSON 또는 zip 선택과 FE 모델 재정의를 미리 작업으로 예약하지 않습니다. 이 이슈는 BE#90의 응답 범위·형태 및 저장 위치 계약을 확인하고 현재 스텁과의 차이를 기록하는 범위로 둡니다. 실제 다운로드·저장 구현은 확정 뒤 필요한 범위만 정합니다.

#544 에서 이 두 단계에 실패 계측(RECEIVED_EXPORT_DOWNLOAD·RECEIVED_EXPORT_SAVE)을 넣어 뒀습니다. 스텁이 항상 성공을 반환하므로 지금은 발화하지 않고, 구현이 들어오는 시점부터 동작합니다.

저장 단계는 Android 저장소 권한·SAF 경로 결정이 필요합니다(앱 전용 저장소 vs 사용자 선택 위치).

Activity

  1. changed the issue type fromtoon Jul 29, 2026
  2. added
    enhancementNew feature or request
    and removed
    bugSomething isn't working
    on Jul 29, 2026
  3. OnlyReadOneBook commented on Jul 30, 2026

    @OnlyReadOneBook
    CollaboratorAuthor

    코드 확증 (2026-07-30)

    ReceiverRepositoryImpl 의 두 메서드가 서버·파일 접근 없이 성공만 반환한다.

    // feature/afternote/data/.../receiver/ReceiverRepositoryImpl.kt:72,74
    override suspend fun downloadAllReceived(): Result<ReceivedExportBundle> = Result.success(ReceivedExportBundle())
    override suspend fun saveReceivedExportToFile(bundle: ReceivedExportBundle): Result<Unit> = Result.success(Unit)

    열람 승인된 수신자 화면에서 "모든 기록 내려받기" 버튼이 실제로 노출되는 것을 확인했다(수신자 홈 요약 하단). 서버에는 내려받을 데이터가 실제로 있는 상태다 — 애프터노트 3건·일기 1건·타임레터 1건 전부 200 으로 조회된다.

    BE 엔드포인트는 BE#90(수신자 받은 기록 전체 내려받기)으로 등록돼 있다.

    같은 파일의 getReceivedAfterNotes(:56)·loadMindRecordsCount(:76)·loadTimeLettersCount(:78) 도 동일한 성공 stub 이라 수신자 홈 카운트가 전부 0 으로 뜬다 — #610.

  4. OnlyReadOneBook commented on Jul 30, 2026

    @OnlyReadOneBook
    CollaboratorAuthor

    실기기 동작 — "성공으로 보인다" 가 아니라 아무 피드백도 없다 (2026-07-30)

    버튼을 실제로 눌러 확인했다. 이슈 제목은 "스텁이 성공만 반환해 사용자에게 성공으로 보인다" 인데, 화면 동작은 그보다 한 단계 더 나쁘다.

    1. 수신자 홈 하단 "모든 기록 내려받기" 탭 → 확인 다이얼로그 "모든 기록을 내려받으시겠습니까?" (아니오 / 예)
    2. "예" 탭 → 네트워크 호출 0건, 다이얼로그만 닫힘
    3. 이후 토스트·스낵바·저장 위치 안내 등 어떤 피드백도 없다

    성공 메시지조차 뜨지 않아 사용자는 요청이 접수된 것인지, 실패한 것인지, 어디에 저장됐는지 알 수 없다. 서버에는 내려받을 데이터가 실제로 있는 상태였다(애프터노트 3건·일기 1건·데일리질문 1건·타임레터 1건 전부 200).

    ReceiverDownloadState 는 Confirming·InProgress·Idle 을 갖고 있어 진행/완료 표시를 붙일 자리는 있다 — 현재는 stub 이 즉시 성공을 반환해 InProgress 가 사실상 스쳐 지나간다.

  5. changed the title [-]fix(afternote): 모든 기록 내려받기 data 계층 미구현 — 스텁이 성공만 반환해 사용자에게 성공으로 보임[/-] [+]모든 기록 내려받기 data 계층 미구현 — 스텁이 성공만 반환해 사용자에게 성공으로 보임[/+] on Aug 28, 2026
  6. added
    bugSomething isn't working
    area:afternote애프터노트 기능 영역
    and removed
    enhancementNew feature or request
    on Aug 28, 2026
  7. OnlyReadOneBook commented on Aug 28, 2026

    @OnlyReadOneBook
    CollaboratorAuthor

    본문의 「호출부는 두 곳 — 수신자 홈(ReceiverHomeViewModel), 내려받기 화면(ReceiverDownloadAllViewModel)」이 현행과 어긋난다. 살아 있는 호출부는 수신자 홈 하나뿐이다.

    ReceiverDownloadAllViewModel 을 쓰는 화면(summary/ReceiverAfternoteScreen.kt 의 ReceiverAfterNoteEntry)은 레포 전체에서 호출부 0건이다. 수신자 애프터노트 목록 라우트(ReceiverRoute.AfternoteListRoute)가 세우는 것은 afternotelist/ReceiverAfternoteHomeEntry 로 다른 구현이고, 그 상태가 31ee4b6d0(수신자 흐름 :feature:receiver 이전) 이후 줄곧 유지돼 왔다.

    BE#90 이 도착해 data 계층을 구현할 때 배선 대상이 한 곳으로 줄어든다는 뜻이다. 다만 「전체 내려받기 전용 화면」이 시안에 있는데 배선만 안 된 것이라면 반대로 그 화면을 살려야 하므로, 시안 대조를 포함한 처분 판정을 #1424 에서 다룬다. 이 이슈의 data 계층 구현 범위 자체는 그대로다.

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

    @OnlyReadOneBook
    CollaboratorAuthor

    «스텁이 성공을 돌려줘 성공으로 보인다»는 하위 결함을 #1726 로 분리했고 PR #1629 가 그 이슈를 Closes 합니다. 두 스텁이 ExportNotSupported 로 실패해 기존 실패 안내가 뜨고, 이 갈래는 텔레메트리에서 제외됩니다.

    이 이슈에는 실제 다운로드·파일 저장 구현, ReceivedExportBundle 재정의, #544 계측 발화가 남고 전부 Afternote-BE#90 응답 계약 확정 뒤라 blocked_by 는 유지합니다.

    본문의 «호출부 두 곳» 중 ReceiverDownloadAllViewModel 은 #1424 로 정리돼 현행 호출부는 수신자 홈 하나입니다.

  10. removed
    pr-open이 이슈를 구현하는 PR 이 열려 있다 — base 가 기본 브랜치가 아니어도 드러낸다
    on Sep 2, 2026
  11. OnlyReadOneBook commented on Sep 13, 2026

    @OnlyReadOneBook
    CollaboratorAuthor

    실측 재확인 (2026-09-13)

    기준은 origin/develop 7d87aa3f4 와 Afternote-BE 원격 트리(main, release) 실조회다. 앞선 코멘트와 겹치는 부분은 줄 번호만 새로 박고, 나머지는 정정과 추가 사실이다.

    1. 제목이 말하는 증상은 develop 에서 닫혀 있다

    feature/receiver/data/src/main/kotlin/com/afternote/feature/receiver/data/repositoryimpl/ReceiverRepositoryImpl.kt

    // :80
    override suspend fun downloadReceivedExport(): Result<ReceivedExportBundle> = Result.failure(ReceiverFailure.ExportNotSupported())
    
    // :82-83
    override suspend fun saveReceivedExportToFile(bundle: ReceivedExportBundle): Result<Unit> =
        Result.failure(ReceiverFailure.ExportNotSupported())

    PR #1629(브랜치 fix/589-export-fail-closed, 커밋 cda955b7f)가 2026-09-06 에 머지했다. Closes 대상은 #1726 이라 이 이슈는 열린 채 남았고, 타임라인에는 교차 참조로만 걸려 있다. 회귀는 feature/receiver/data/src/test/kotlin/com/afternote/feature/receiver/data/repositoryimpl/ReceiverRepositoryImplExportTest.kt 의 두 테스트가 고정한다.

    사용자에게 보이는 것도 성공이 아니다. ReceiverHomeViewModel 의 toDownloadFailure 가 ExportNotSupported 를 ReceiverDownloadState.Failed(home_receiver_download_all_failed) 로, 저장 단계는 Failed(home_receiver_download_all_save_failed) 로 보내고 재시도 팝업은 주지 않는다.

    따라서 이 이슈에 남은 범위는 "성공으로 보이는 것을 고치는 일" 이 아니라 실제 내려받기와 저장 구현 하나다. 제목도 그에 맞춰 바꾸는 편이 다음 착수자에게 정확하다.

    2. 본문이 develop 실태와 어긋나는 항목

    본문 자체는 고치지 않았다. 앞선 코멘트들도 본문을 남긴 채 코멘트로 정정해 왔고, 어긋남의 이력이 이 이슈의 기록 가치라서다.

    3. 블로커 재확인

    Afternote-BE#90 은 2026-09-13 현재 OPEN 이고 2026-08-08 이후 갱신이 없다. blocked_by 도 그대로 걸려 있다.

    원격 트리 실조회 결과 export 또는 download 계열 엔드포인트는 두 브랜치 어디에도 없다.

    • main: ReceivedController(/api/v1/received, POST 4개), ReceivedRecordController(/api/v1/received-records, 13개), ReceiverInvitationController(/api/v1/receiver-invitations, 3개)
    • release: ReceivedController(POST 4개), ReceiverAuthController(/api/v1/receiver-auth, 16개)

    응답 형태가 단일 JSON 인지 zip 인지, 포함 범위가 어디까지인지도 미확정이라 구현 착수 조건은 아직 아니다.

    4. main 에서 수신자 조회 구조가 바뀌었다

    release 의 ReceiverAuthController 가 main 에는 없고, 수신자 조회가 /api/v1/received-records/{receiverId}/... 로 옮겨졌다. FE 는 아직 feature/receiver/data/src/main/kotlin/com/afternote/feature/receiver/data/service/ReceiverAfternoteApiService.kt:14, :18 에서 receiver-auth/after-notes 를 부른다. 이 이관 자체는 이 이슈 범위가 아니므로 사실만 적는다.

    BE#90 에는 변수가 하나 는다. 전체 내려받기의 "전체" 가 계정 단위인지 record-box(receiverId) 단위인지가 main 구조에서는 먼저 정해져야 한다.

    5. 지금 코드로 뗄 독립 범위는 없다

    서버 계약 없이 할 수 있던 일은 #1726 으로 끝났다. ReceivedExportBundle(payloadJson) 은 확정 계약이 아니라 임시 형태라 지금 다듬을 값이 없고, 반대로 걷어내면 시안에 있는 버튼과 이미 배선된 소비처를 되살릴 때 다시 만들어야 한다. 저장 위치와 SAF 결정도 확인 팝업 이후 시안이 없어 FE 단독 결정 대상이 아니다(BE#90 코멘트에 남긴 시안 노드 1728-26376 기준으로 확인 팝업까지만 그려져 있다).

  12. OnlyReadOneBook commented on Sep 26, 2026

    @OnlyReadOneBook
    CollaboratorAuthor

    보류로 닫는다.

    제목의 결함(스텁이 성공을 돌려줌)은 #1726 과 PR #1629 로 해결됐다. 지금 develop 은 내려받기를 ReceiverFailure.ExportNotSupported 실패로 돌려준다.

    남은 범위(실제 다운로드와 저장, ReceivedExportBundle 재정의, #544 계측)는 무엇을 만들지가 정해지지 않았다. Afternote/Afternote-BE#90 의 응답 형태(JSON 인지 zip 인지), 포함 범위, 계정 단위인지 기록함 단위인지가 미정이고 BE 쪽 답이 없다. BE origin/main 7c961ec 에는 내려받기 엔드포인트가 없다. 기능을 둘지와 확인 뒤 흐름(진행, 완료, 실패, 저장 위치)도 시안이 없어 PM 결정 대상이다. 결정이 나면 남은 범위만 새로 연다.

  13. OnlyReadOneBook commented on Sep 26, 2026

    @OnlyReadOneBook
    CollaboratorAuthor

    2026-09-26 정정. 위 코멘트의 「확인 뒤 흐름은 시안이 없어」는 틀렸다. 정리 Screen Design 의 최종 수신자 프로토타입 화면(4327:73596) 아래에 확인 팝업 뒤 흐름이 두 안으로 있다.

    디자이너가 8월 2일 댓글(1867937771)에서 안드로이드 기본 공유 창을 제안한 것도 있어 셋 중 무엇으로 갈지가 미정이다. 보류 판정 자체는 그대로다. 받는 단위(보고 있는 발신자 한 명인지 전체인지)와 확인 뒤 화면은 오늘 PM 질문방에 올렸다.

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

Metadata

Metadata

Labels

area:afternote애프터노트 기능 영역bugSomething isn't working

Type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions