Skip to content

Feature: 만료 단계 도메인 통합 및 listView 만료 배지 3/7일 분리 #85

Description

@yeseonglee

목표

listView 행의 만료 배지를 3일 / 7일 2단계로 분리하고, 현재 세 곳에 흩어진 만료 임계값을 도메인 타입 하나로 통합한다.

현재 문제

만료 관련 임계값이 세 군데에 각각 존재한다.

위치 용도
SecretQuery.Collection.expiringSoonWindowDays (DVDomain) 30일 Expired 탭 쿼리 범위
SecretListView.expiringSoonThreshold 3일 행 배지 아이콘
ExpiryBucket.contains (SecretListView.swift:309-320) 7일 / 30일 리터럴 Expired 탭 섹션 분할

결과적으로 조용히 깨지는 구조다. 도메인의 30일을 60일로 바꾸면 쿼리는 60일치를 가져오지만 ExpiryBucket은 30일까지만 분류하므로, 나머지 30일치가 화면에서 사라진다. ExpiryBucketprivate enum이라 테스트도 불가능하다.

여기에 3/7일 배지를 그냥 추가하면 임계값 사본이 네 개가 된다.

작업 범위

신규 — DVDomain

  • SecretExpiryStage 타입 추가 (네이밍 논의 필요)
    • 단계: expired / urgent(3일) / soon(7일) / upcoming(30일) / none
    • stage(of:referenceDate:)expiresAt이 nil이면 .none
    • 경계값 상수를 이 타입이 단독 소유. expiringSoonWindowDays(30일)도 여기로 흡수
  • 경계 조건 테스트 (각 단계 경계 ±1일, nil 케이스)

수정 — DVPresentation

  • DVVaultContainer.TrailingIcon에 3일/7일 구분 케이스 추가
  • SecretListView.trailingIcon(for:)SecretExpiryStage를 아이콘·색으로 번역만 하도록 변경
  • SecretListView.expiringSoonThreshold 제거
  • ExpiryBucketSecretExpiryStage 기반으로 재작성 (7일/30일 리터럴 제거)
  • SecretQuery.Collection.expiringWindow(from:)이 새 상수를 참조하도록 정리

참고

  • 아이콘 종류·색은 계속 뷰가 결정한다. 도메인은 "어느 단계인가"만 판단하고, 경계값 정합성을 테스트로 보장하는 것이 목적
  • 3일/7일 배지는 색만으로 구분하지 않도록 아이콘 형태도 달라야 한다 (색각 이상 대응)

Metadata

Metadata

Assignees

Labels

✨ Feature새로운 기능 개발

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions