Skip to content

fix(home): 기록 카테고리 카드가 «모름» 을 0 으로 접지 않게 한다 (#700 일부) - #1104

Merged
Sadturtleman merged 2 commits into
developfrom
fix/700-category-count-fabrication
Aug 25, 2026
Merged

Sadturtleman merged 2 commits into
developfrom
fix/700-category-count-fabrication

Conversation

@Sadturtleman

Copy link
Copy Markdown
Collaborator

#700 의 3번(하드코딩 0 제거) 만 담는다. 1·2번(시안 정본 확정 · 카드 구성 재작성)은 디자이너 확정이 선행이라 뺐다 — 대신 확정에 쓸 실측을 아래에 남긴다.

무엇이 문제였나

// 종전 — HomeTabViewModel
categoryCounts =
    MindRecordCategory.entries.associateWith { category ->
        when (category) {
            MindRecordCategory.DIARY -> diaryCategoryCount
            MindRecordCategory.DAILY_QUESTION -> 0   // ← 실제로 모르는 값
            MindRecordCategory.WEEKLY_REPORT -> 0    // ← 실제로 모르는 값
        }
    }

지금은 화면이 일기 카드 하나만 그려서 보이지 않을 뿐, 카드가 늘면 그 0 이 그대로 «기록 0건» 으로 노출된다. 목업 숫자(7 같은)는 오히려 눈에 띄지만 0 은 그럴듯한 거짓이라 사용자가 그대로 믿는다 — #562·#952 에서 같은 이유로 대시 표기를 택했다.

로딩 분기도 같은 자리였다: MindRecordCategory.entries.associateWith { 0 }.

무엇을 바꿨나

  • 값을 아는 카테고리만 map 에 담는다. 조회 전에는 빈 map 이다.
  • RecordCategoryCard.totalCount: Int? — 모르면 대시(–), 0 은 확정값이라 그대로 숫자로 그린다. 수신자 홈·주간 요약과 같은 규칙이고 en dash 도 맞췄다.

회귀 가드

RecordCategoryCountTest 3건 — 모름은 대시(0 은 존재하지 않음), 0건은 숫자, 1234 는 1,234.

시안 실측 — 1·2번 확정에 쓸 근거

이슈 본문의 시안 3종(2372:52483 · 3628:18329 · 3628:18722)은 「정리 Screen Design」 페이지에 같은 화면이 다시 그려져 있다. 새 프레임 둘을 실제로 렌더해 확인했다.

항목 4327:99020 4327:99103 현재 앱
기록 카테고리 카드 없음 없음 일기 1장
NEXT STEP 「타임레터」 + 「AFTER NOTE NEXT STEP」 2장 2장 「AFTER NOTE NEXT STEP」 1장
타임레터 카드 문구 애프터노트 문구와 동일(복제) 「내 자식들의 입학식, 졸업식에 남겨 줄 편지를 작성하셨나요?」 + 「타임레터 입력하러가기」 없음
주간 그리드 좌측 사진 빈 상태(플레이스홀더 + 타임레터 기록 남기러가기) 사진
MEMORIES 명칭 TIME LETTERS MEMORIES 같음 MEMORIES

즉 이슈가 «타임레터 NEXT STEP 이 애프터노트 카드 복제 목업» 이라고 짚은 부분은 4327:99103 에서 고유 문구로 채워져 있다. 카테고리 카드는 두 프레임 모두 없다.

정리 페이지가 정본이라면 확정 결과는 «카테고리 카드 제거 + 타임레터 NEXT STEP 신설 + MEMORIES → TIME LETTERS MEMORIES» 가 된다. 다만 그 페이지가 정본이라는 확인은 디자이너 몫이라 이 PR 에서 실행하지 않았다. 이슈에도 같은 내용을 남긴다.

검증

게이트 결과
전 모듈 testDebugUnitTest BUILD SUCCESSFUL
:app:assembleDebug · :app:compileDebugAndroidTestKotlin BUILD SUCCESSFUL
compileDebugScreenshotTestKotlin (home · core:ui) BUILD SUCCESSFUL

baseline 재생성 불필요 — 홈 스크린샷 테스트는 DIARY to 8 을 명시적으로 넘기고 로딩 분기는 shimmer 라, 그려지는 픽셀이 그대로다.

실기동 QA: 못 했다. dev 서버가 오늘 점검 시간대라 응답하지 않는다(curl 15초 타임아웃). 대신 Robolectric 으로 세 경우(모름·0건·1234)를 실제 컴포지션에서 확인했다.

HomeTabViewModel 이 MindRecordCategory.entries 를 돌며 데일리질문·주간 리포트에
0 을 박아 넣고 있었다. 지금은 화면이 일기 카드만 그려 안 보일 뿐, 카드가 늘면 그
0 이 그대로 «기록 0건» 으로 노출된다. 목업 숫자는 눈에 띄지만 0 은 그럴듯한 거짓이라
사용자가 그대로 믿는다.

- ViewModel·로딩 분기 모두 **값을 아는 카테고리만** map 에 담는다.
- RecordCategoryCard.totalCount 를 Int? 로 열고, 모르면 대시로 그린다 — 수신자
  홈(#952)·주간 요약(#562)과 같은 표기다.

시안 정본 확정이 필요한 카드 구성 자체는 이 커밋 범위 밖이다.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

@1hyok 1hyok left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

이슈 #700 의 3번 항목(«하드코딩된 0 카운트 제거 — 표시할 카테고리는 실카운트를, 표시하지 않을 카테고리는 map 에서 제외»)을 그대로 이행했다. totalCount: Int? 로 «모름» 과 «0건» 을 타입에서 가른 것이 맞는 방향이고, 로딩 상태의 emptyMap() 전환도 shimmer 가 덮는 구간이라 표시 변화가 없다.

주석이 근거로 든 «수신자 홈과 같은 표기» 도 실제로 확인했다 — receiver_home_section_count_unavailable 이 이미 같은 en dash 를 쓴다. blocking 없다.

검증

  • CI: 필수 체크 11종 전부 green.
  • 대시 표기 일치 실측: feature/receiver/presentation/src/main/res/values/strings.xml:22 이 – (U+2013) 로 같다. HomeSectionCard.countText() · MindRecordStatCard 가 count?.toString() ?: stringResource(...) 로 같은 규칙을 쓴다.
  • RecordCategoryCard 호출부 전수: HomeTabMindRecordLazyItems 한 곳 — Int? 로 넓혀도 다른 소비처가 깨지지 않는다.
  • 실기동 QA 해당 없음 — 표시 분기를 Robolectric 3건(«모름»·0건·천 단위)이 덮고, 현재 화면이 그리는 카드는 DIARY 하나뿐이라 실제 노출 경로에 변화가 없다. 시안 대조 해당 없음 — 이슈 #700 본문대로 홈 시안 정본 자체가 미확정(3종 병존)이고, 이 PR 은 카드 구성이 아니라 카운트 산출만 건드린다.

지적

  1. [normal] 같은 값의 «모름» 문자열이 모듈마다 따로 선언된다 → strings.xml:207 인라인 코멘트.
  2. [normal] 테스트가 리소스 대신 리터럴을 검사한다 → RecordCategoryCountTest.kt:36 인라인 코멘트.

<string name="mindrecord_receiver_retry">다시 시도</string>
<string name="mindrecord_receiver_title">마음의 기록</string>
<!-- 카테고리 카드 기록 수를 아직 모를 때. en dash — 수신자 홈·주간 요약과 같은 표기 (#700·#952·#562). -->
<string name="mindrecord_home_category_count_unavailable">–</string>

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[normal] 주석이 «수신자 홈·주간 요약과 같은 표기» 라고 적은 그대로, feature/receiver/presentation 의 receiver_home_section_count_unavailable 이 이미 같은 값(–)을 들고 있다. 여기서 세 번째가 생기면(주간 요약 #562 는 #1055 로 열려 있다) 같은 규칙이 서로 다른 세 리소스로 흩어진다.

두 모듈 다 core:ui 에 의존하므로 core_ui_count_unavailable 같은 이름으로 한 벌만 두는 편이 «규칙» 이라는 성격에 맞는다. 지금 당장 옮기지 않더라도, 세 번째가 붙기 전이 정리하기 가장 싼 시점이라 남긴다.

AfternoteTheme { card(totalCount = null) }
}

composeRule.onNodeWithText("–").assertIsDisplayed()

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[normal] 리소스 값을 리터럴로 다시 적어 두면 문자열을 바꿀 때 테스트가 소리 없이 갈린다 — en dash(–)와 hyphen(-)·em dash(—)는 눈으로 구분되지 않아서 특히 그렇다. 같은 파일의 activity.getString(R.string.mindrecord_home_category_count_unavailable) 로 잡으면 리소스와 함께 움직인다. (수신자 쪽 ReceiverHomeCountFallbackTest 도 같은 방식이라 새 규약은 아니다.)

덧붙여 58번 줄의 @androidx.compose.runtime.Composable 은 상단 import 로 올리면 나머지 애노테이션과 표기가 맞는다.

@Sadturtleman
Sadturtleman merged commit 33039a3 into develop Aug 25, 2026
14 checks passed
@Sadturtleman
Sadturtleman deleted the fix/700-category-count-fabrication branch August 25, 2026 06:49
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.

2 participants