Skip to content

feat: テンプレート編集の保存処理を複数曜日一括対応に変更#147

Merged
stotic-dev merged 4 commits into
feat/housework_templatefrom
feat/housework_template_edit
May 15, 2026
Merged

feat: テンプレート編集の保存処理を複数曜日一括対応に変更#147
stotic-dev merged 4 commits into
feat/housework_templatefrom
feat/housework_template_edit

Conversation

@stotic-dev
Copy link
Copy Markdown
Owner

@stotic-dev stotic-dev commented May 15, 2026

経緯

関連Issue: #140

家事週間テンプレート機能(#67)の実装の一環。
これまで updateDay は曜日単位での更新しか行えず、画面で複数の曜日をまとめて編集して保存することができなかった。また HouseworkTemplateMeta に楽観的ロック用の version プロパティが直接生えており、Domain 層が Infrastructure 層の永続化都合を持ってしまっていた。

これらを解消するため、保存処理を複数曜日の一括更新に変更し、version を Domain から切り離す形に整理した。

実装内容

保存処理を複数曜日の一括更新に変更

  • HouseworkTemplateClient.updateDay(単一曜日)を updateDays(複数曜日)に置き換え、Firestore のトランザクション内で複数の HouseworkTemplateDay を一括書き込みするよう変更
  • 1回の保存操作で「変更があった曜日だけをまとめて反映する」UI 操作と整合させるため、エンドポイント側を複数件対応にした方が呼び出し側の責務がシンプルになると判断

HouseworkTemplateMeta から version を分離

  • Domain の HouseworkTemplateMeta から version を削除し、Infrastructure 層に HouseworkTemplateMetaDocumenttemplateId/name/version)を新設して Firestore とのマッピングを担わせた
  • 楽観的ロック用の version は永続化レイヤー固有の関心事であり、Domain モデルが知るべきではないため切り分けた

編集中の version は SnapshotListener で追従

  • addMetaVersionSnapshotListener を新設し、編集中はメタドキュメントの version を購読して HouseworkTemplateEditStore.currentVersion を自動更新する構成にした
  • 保存時に古い currentVersion を持ち続けると他クライアントの更新と必ず衝突してしまうため、Listener で追従させることで楽観的ロックの整合性を担保
  • 併せて FirestoreService に単一ドキュメント用の addSnapshotListener を追加

Days 監視と保存責務を HouseworkTemplateListStore 側に移動

  • HouseworkTemplateEditStore が持っていた days の SnapshotListener / saveDayHouseworkTemplateListStorestartObservingDays / stopObservingDays / saveDays に移行
  • 一覧側で selectedDays を持つことで「表示中のテンプレートの曜日定義」というドメイン状態を一箇所に集約。Edit 側は「編集セッション固有の状態(editors / currentVersion / keepalive)」だけに責務を絞った
  • 保存成功時はサーバ反映を待たずに selectedDays をローカル更新する(既存の dayOfWeek は置換、未登録は追加)

確認内容

  • HouseworkTemplateListStoreTest / HouseworkTemplateEditStoreTest / HouseworkTemplateEditStoreMetaVersionListenerTest が通ること

@stotic-dev stotic-dev self-assigned this May 15, 2026
@stotic-dev stotic-dev added the feature 機能追加 label May 15, 2026
@stotic-dev-bot
Copy link
Copy Markdown
Collaborator

stotic-dev-bot commented May 15, 2026

Warnings
⚠️ PRの変更行が多すぎます。500行以内にしてね!理想は400行!

Generated by 🚫 Danger Swift against 528aca1

@stotic-dev-bot
Copy link
Copy Markdown
Collaborator

stotic-dev-bot commented May 15, 2026

File Coverage
LocalPackage/Sources/Features/HouseworkTemplateFeature/Stores/HouseworkTemplateEditStore.swift 86.44068%
LocalPackage/Sources/HometeDomain/Cohabitant/HouseworkTemplate/HouseworkTemplateListStore.swift 95.38461%
LocalPackage/Sources/HometeDomain/Cohabitant/HouseworkTemplate/HouseworkTemplateMeta.swift 57.142857%
LocalPackage/Sources/HometeDomain/Dependencies/HouseworkTemplateClient.swift 55.555557%
LocalPackage/Tests/HometeDomainTests/HouseworkTemplate/HouseworkTemplateListStoreTest.swift 98.96373%
LocalPackage/Tests/HouseworkTemplateFeatureTests/HouseworkTemplateEditStoreMetaVersionListenerTest.swift 95.12195%
LocalPackage/Tests/HouseworkTemplateFeatureTests/HouseworkTemplateEditStoreTest.swift 100.0%

Generated by 🚫 Danger Swift against 528aca1

@stotic-dev stotic-dev merged commit 18bebbe into feat/housework_template May 15, 2026
6 checks passed
@stotic-dev stotic-dev deleted the feat/housework_template_edit branch May 15, 2026 02:14
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

feature 機能追加

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants