Skip to content

Refactor: dayOfWeek マッピングを HouseworkTemplateDay の静的メソッドに集約 #141

Description

@stotic-dev

Sub-issue of #67

関連する問題

HouseworkTemplateApplyStore.executeApply 内で曜日マッピングを以下のように直書きしている。

```swift
let weekday = plan.calendar.component(.weekday, from: date)
let dayOfWeek = weekday - 1 // Sunday=0 前提
```

Calendar.component(.weekday) は基本的に Sunday=1 を返すが、ロケールや firstWeekday の影響を受けないことを前提とした実装が散在すると、Cloud Functions 側の自動適用ロジック実装時にも同等のマッピングを再実装する必要があり、整合性が取れなくなるリスクがある。

doc/strategy/housework_template.md でも "0" = 日曜日と定義されており、Domain として一元管理すべき情報。

提案する解決策

HouseworkTemplateDay に静的メソッドまたは初期化用ヘルパーを追加して曜日マッピングを Domain 側に集約する。

  1. HouseworkTemplateDay.dayOfWeek(for: Date, calendar: Calendar) -> Int を追加
  2. HouseworkTemplateApplyStore 内の直書き計算を上記メソッド呼び出しに置き換え
  3. 既存テストでカバーされていない場合は HouseworkTemplateDay のテストを HometeDomainTests 配下に追加(境界値: 日曜・土曜、各カレンダー firstWeekday の挙動)
  4. 将来 Cloud Functions 実装時にも同じ仕様を参照できるよう docコメントで "0"=日曜 ... "6"=土曜 を明記

代替案

  • 計算用に HouseworkTemplateWeekday enum を新設する案:型安全だが Firestore スキーマ(Int で保持)との変換ロジックが増えるため、Issue 規模に対してオーバースペック。今回は単純な静的メソッドに留める

その他の情報

  • 関連方針: `doc/strategy/housework_template.md` の HouseworkTemplates/{templateId}/Days/{dayOfWeek} セクション
  • 関連ファイル:
    • `LocalPackage/Sources/HometeDomain/Cohabitant/HouseworkTemplate/HouseworkTemplateDay.swift`
    • `LocalPackage/Sources/Features/HouseworkTemplateFeature/Stores/HouseworkTemplateApplyStore.swift`

Activity

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    mentenance開発環境のメンテナンス

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions