Spec
ADDED Requirements¶
Requirement: グループ名の編集¶
システムは、Admin権限を持つユーザーがグループの表示名を編集できる機能を提供しなければならない(MUST)。グループIDは変更してはならず、index.jsonのgroups[].nameフィールドのみを更新しなければならない。
Scenario: 管理者がグループ名を正常に編集¶
- WHEN Admin権限を持つユーザーがAdmin画面でグループ名を編集し、保存ボタンをクリックする
- THEN システムは新しいグループ名で
index.jsonを更新し、Blob Storageに保存し、UIに変更を即座に反映する
Scenario: グループIDは変更されない¶
- WHEN 管理者がグループ名を変更する
- THEN システムはグループIDを保持し、nameフィールドのみを更新する
Requirement: 権限チェック¶
システムは、グループ名編集操作を実行する前に、ユーザーがSAS tokenによるAdmin認証を持っていることを検証しなければならない(MUST)。
Scenario: 認証済み管理者のみが編集可能¶
- WHEN SAS tokenを持つ管理者がグループ名編集を試みる
- THEN システムは編集を許可する
Scenario: 非認証ユーザーは編集不可¶
- WHEN SAS tokenを持たないユーザーがAdmin画面にアクセスする
- THEN システムはユーザーをダッシュボードにリダイレクトし、編集機能を表示しない
Requirement: 入力バリデーション¶
システムは、グループ名の入力値をバリデーションし、不正な値を拒否しなければならない(MUST)。
Scenario: 空文字を拒否¶
- WHEN ユーザーが空文字のグループ名を保存しようとする
- THEN システムはエラーメッセージ「グループ名を入力してください」を表示し、保存を中断する
Scenario: 空白のみを拒否¶
- WHEN ユーザーが空白のみのグループ名を保存しようとする
- THEN システムはエラーメッセージ「グループ名を入力してください」を表示し、保存を中断する
Scenario: 長すぎる名前を拒否¶
- WHEN ユーザーが256文字を超えるグループ名を保存しようとする
- THEN システムはエラーメッセージ「グループ名は256文字以内で入力してください」を表示し、保存を中断する
Scenario: 有効な名前を受け入れ¶
- WHEN ユーザーが1文字以上256文字以内の非空白グループ名を保存する
- THEN システムはバリデーションを通過し、保存処理を実行する
Requirement: データ永続化¶
システムは、グループ名の変更をindex.jsonに反映し、Blob StorageにPUTリクエストで保存しなければならない(MUST)。
Scenario: index.jsonの更新¶
- WHEN グループ名の変更が確定する
- THEN システムは対象グループの
nameフィールドを新しい値に更新し、updatedAtタイムスタンプを現在時刻に更新する
Scenario: Blob Storageへの保存¶
- WHEN index.jsonの更新が完了する
- THEN システムはSAS tokenを使用して
data/index.jsonをBlob StorageにPUTリクエストで保存する
Scenario: 保存失敗時のエラーハンドリング¶
- WHEN Blob StorageへのPUTリクエストが失敗する
- THEN システムはエラーメッセージ「保存に失敗しました。ネットワーク接続を確認してください」を表示し、UIの状態を編集前に戻す
Requirement: 楽観的ロック¶
システムは、同時編集による競合を検出するため、保存前に最新のindex.jsonを取得し、updatedAtタイムスタンプを比較しなければならない(MUST)。
Scenario: 競合なしで保存成功¶
- WHEN 保存時の
updatedAtがローカルキャッシュと一致する - THEN システムは変更を保存し、成功メッセージを表示する
Scenario: 競合検出時の警告¶
- WHEN 保存時の
updatedAtがローカルキャッシュと異なる - THEN システムは警告メッセージ「他のユーザーが同時に編集中。最新データを再読み込みすること」を表示し、保存を中断する
Requirement: UI即時反映¶
システムは、グループ名の保存が成功した後、Admin画面のグループ一覧を最新のindex.jsonで更新し、変更を即座に反映しなければならない(MUST)。
Scenario: 保存後の自動再読み込み¶
- WHEN グループ名の保存が成功する
- THEN システムは最新の
index.jsonを取得し、Admin画面のグループ一覧を更新する
Scenario: セッションデータには影響なし¶
- WHEN グループ名が変更される
- THEN システムは
data/sessions/*.jsonを変更せず、イミュータブルなセッションデータを保持する