Skip to content

Mobileのタスク作成・更新・削除を楽観的に反映する #280

Description

@hirokisakabe

Status: Ready
Depends on: #277

概要

Mobile のタスク作成・更新・削除を、API 応答前にカレンダー範囲と未スケジュール一覧へ楽観的に反映する。

背景 / モチベーション

  • 現在の apps/mobile/hooks/use-tasks.ts は各 mutation の成功後に task query を invalidate するだけで、API 応答まで表示が変わらない
  • ステータストグル、フォームでの編集、日付あり・未スケジュール間の移動、作成・削除で操作結果を即座に表示したい
  • Web の 日付あり・未スケジュール間の移動で両Query cacheを楽観的更新する #277 で扱った両 cache の所属判定、並行 mutation、rollback、再取得競合の知見を Mobile にも適用したい

受け入れ条件

  • 日付あり・未スケジュールのタスク作成が API 応答前に正しい query cache へ表示され、成功後の再取得で一意なサーバー確定値になる
  • タイトル・説明・ステータス・カテゴリなど所属先が変わらない更新が API 応答前に対象 task へ反映される
  • 日付ありから未スケジュール、未スケジュールから表示範囲内、表示範囲内外への日付変更が API 応答前に正しい cache 所属へ反映される
  • タスク削除が API 応答前に、そのタスクを保持する cache から反映される
  • mutation 失敗時は対象 mutation の変更だけが操作前へ戻り、別 task の並行更新を失わない
  • 同一 task の連続更新は成功・失敗の順序にかかわらず最終 cache がサーバー状態と整合し、異なる task の更新は不要に直列化されない
  • 進行中の楽観的更新が別 mutation の invalidate・再取得で上書きされず、全 mutation 完了後にサーバー確定状態へ同期される
  • 未取得だった query cache は失敗時に未取得状態へ戻り、空配列へ固定されない
  • API 応答保留・失敗・並行更新・成功後再取得を含む hook テストで、作成・更新・削除と両 cache の整合性を確認できる
  • lint、format-check、typecheck、test が成功する

実装方針

スコープ外

  • API・DB・CLI・Web の変更
  • 表示していない別月の range cache への先行追加
  • query key 全体の再設計
  • Undo UI や新しいエラー UI の追加
  • 画面レイアウトやビジュアルデザインの変更

参考

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions