コンテンツにスキップ

Spec

ADDED Requirements

Requirement: グループ名の編集

システムは、Admin権限を持つユーザーがグループの表示名を編集できる機能を提供しなければならない(MUST)。グループIDは変更してはならず、index.jsongroups[].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を変更せず、イミュータブルなセッションデータを保持する