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 側に集約する。
HouseworkTemplateDay.dayOfWeek(for: Date, calendar: Calendar) -> Int を追加
HouseworkTemplateApplyStore 内の直書き計算を上記メソッド呼び出しに置き換え
- 既存テストでカバーされていない場合は
HouseworkTemplateDay のテストを HometeDomainTests 配下に追加(境界値: 日曜・土曜、各カレンダー firstWeekday の挙動)
- 将来 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`
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 側に集約する。HouseworkTemplateDay.dayOfWeek(for: Date, calendar: Calendar) -> Intを追加HouseworkTemplateApplyStore内の直書き計算を上記メソッド呼び出しに置き換えHouseworkTemplateDayのテストをHometeDomainTests配下に追加(境界値: 日曜・土曜、各カレンダー firstWeekday の挙動)"0"=日曜 ... "6"=土曜を明記代替案
HouseworkTemplateWeekdayenum を新設する案:型安全だが Firestore スキーマ(Intで保持)との変換ロジックが増えるため、Issue 規模に対してオーバースペック。今回は単純な静的メソッドに留めるその他の情報
HouseworkTemplates/{templateId}/Days/{dayOfWeek}セクション