Skip to content

feat(task): /api/tasks/{id}/visibility に楽観ロック(If-Match)を付与する #683

@win2cot

Description

@win2cot

概要

ADR-0012 の楽観ロック適用基準(#680 で追記)に基づき、PATCH /api/tasks/{id}/visibility に If-Match を付与する。現状バックエンドは visibility 変更に If-Match を要求しておらず楽観ロック対象外。

根拠(事故分析)

  • visibility 変更は visibility + stakeholderUserIds を束ねるアクセス制御変更で、silent な後勝ち上書きは「見えるべき人が見えない / 見えてはいけない人が見える」状態を生みうる(実害が高い)。
  • 変更経路は所有者のみ・/visibility 限定で低頻度 → If-Match を付けても誤検知 412 はほぼ出ず、コストほぼゼロの保険。

やること

  • TaskController.changeVisibility@RequestHeader(IF_MATCH) を追加
  • ChangeVisibilityUseCase に version 一致チェック(PreconditionFailedException → 412)を追加
  • OpenAPI /visibility に If-Match parameter(必須)+ 412 を追記
  • web/js/api.js の visibility 変更呼び出しで If-Match 送出 + 412 ハンドリング

受入条件

  • If-Match 古い version → 412、一致 → 200 の IT
  • OpenAPI と実装が整合

関連

blocked_by #680(ADR-0012 適用基準の追記が前提)/ ADR-0012

Metadata

Metadata

Assignees

No one assigned

    Labels

    area/backendJava / Spring バックエンド実装変更area/frontendフロントエンド(HTML/CSS/JS/Bootstrap 5)変更area/openapiOpenAPI 仕様(api/openapi.yaml)変更priority/p2Medium。完了が望ましいが柔軟に判断可task-type:implコード実装が主体のタスク

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions