コンテンツにスキップ

管理画面

画面概要

管理者向けの機能を集約した画面。参加者レポートの CSV 取込、会議グループ名の修正、主催者の設定、講師の設定、セッション管理、グループの統合を行う。管理者(SAS トークン認証済み)のみアクセスできる。

設計決定: 2カラムレイアウト(#160)

左カラム(グループ一覧アコーディオン)と右カラム(セッション編集パネル)の2カラムレイアウトを採用する。グループとセッションは親子関係にあり、グループを展開→セッションを選択→右カラムで編集という操作フローを直感的に実現するため。

設計決定: AdminPage の遅延読み込み(#71)

AdminPage は React.lazy() で遅延読み込みとし、PapaParse 等の管理者専用モジュールをメインバンドルから分離する。管理者のみが使用する画面であり、一般利用者のバンドルサイズに影響させないため。ヘッダーの管理リンクに onMouseEnter でプリロードを仕込み、遷移時のローディングを最小化する。

ルート

#/admin

ページコンポーネント

AdminPagesrc/pages/AdminPage.jsx、遅延読み込み)

画面レイアウト

管理画面

表示項目

CSV アップロードセクション

# 項目名 説明
1 ファイルドロップゾーン CSV ファイルのドラッグ&ドロップ受付エリア
2 ファイルキューリスト アップロードされたファイルの一覧(ファイル名、解析状態、プレビュー)
3 プログレスバー 一括保存の進捗(現在/合計)

設計決定: グループ名プルダウン(#65)

ファイルキュー内にグループ名プルダウンを設け、CSV 解析後に自動検出されたグループ名をデフォルト選択とする。CSV の会議タイトルが空の場合にグループ名が空になるケースへの対応として、グループ名が空の場合はエラー状態とし、既存グループを選択するまで保存不可とする。

会議グループ一覧(左カラム)

# 項目名 説明
1 チェックボックス グループ選択用(統合操作に使用)
2 グループ名 会議グループの名称(インライン編集可能)
3 セッション数 グループに含まれるセッション数
4 未設定バッジ 主催者・講師が未設定のセッション数

設計決定: グループ名インライン編集と ID 不変(#35)

グループ名はインライン編集で変更可能とする。グループ ID は CSV の会議タイトルの SHA-256 ハッシュから生成されるため不変とし、表示名のみを変更対象とする。SAS トークン認証(管理者権限)が必要。

設計決定: グループ統合機能(#109)

Teams の会議タイトルが変更されると同一の活動が別グループとして登録されるため、グループ統合機能を設ける。統合先グループを1つ選択し、統合元のセッションを移動後に統合元グループを削除する。セッション JSON ファイル内の groupId は旧グループ ID のまま残るが、参照は index.jsonsessionRevisions 経由のため影響しない。

設計決定: グループ別アコーディオン UI(#133)

セッション名管理はグループ別のアコーディオン UI とする。グループ数・セッション数の増加時にフラットなテーブルでは目的のセッションを探すのが困難になるため、グループごとの折りたたみで見通しを確保する。デフォルトでは最初のグループのみ展開する。

グループ展開時

# 項目名 説明
1 主催者セレクター 会議グループの主催者を選択するドロップダウン
2 セッション一覧 グループ内のセッションボタンリスト

セッション編集パネル(右カラム)

# 項目名 説明
1 セッション名 セッションの別名(256文字以内)
2 参照 URL セッションの参照 URL
3 講師一覧 セッションの講師メンバー(複数選択可能)
4 参加者テーブル セッションの参加者一覧

設計決定: 講師情報の管理方式(#158)

講師情報はセッション JSON の instructors フィールド(メンバー ULID の配列)で管理する。すべての講師はメンバーとして登録済みであることを前提とし、新規講師の手入力時は index.json に新メンバーを作成して ULID を発行する。講師名は index.jsonmember.name を参照して表示し、セッション JSON に名前を重複保持しない(名前の一元管理)。instructors フィールドが存在しない既存データは空配列として扱う(後方互換)。

設計決定: セッションのリビジョン管理(#113 / #136)

セッション JSON はリビジョン管理とする。セッション参照は {sessionId}/{revision} の形式で、編集時に新リビジョンを作成する。セッション名や講師などの編集によりセッション JSON は可変リソースとなるが、リビジョンを分けることで HTTP キャッシュとの整合性を確保する(旧リビジョンのキャッシュが新データを汚染しない)。

設計決定: セッションへの外部 URL リンク(#193)

セッション JSON に url フィールドを設け、外部リソース(資料・録画・議事録等)への URL を保持する。url は空文字列またはリンク先 URL を取り、未定義時は空文字列として扱う(後方互換)。バリデーションは https:// または http:// で始まるかを検証する。

グループ統合ダイアログ

# 項目名 説明
1 統合対象グループ 選択されたグループの一覧(ラジオボタンで統合先を選択)
2 グループ情報 グループ名、ID、セッション数、合計参加時間

操作仕様

CSV アップロード

# 操作 振る舞い
1 CSV ファイルをドロップ ファイルを解析してキューに追加する
2 一括保存ボタンをクリック キュー内の全ファイルを Blob Storage に保存する
3 リトライボタンをクリック 失敗した操作を再実行する

会議グループ管理

# 操作 振る舞い
4 グループ名をインライン編集 グループ名を編集・保存する
5 グループのチェックボックスを選択 グループを統合対象として選択する
6 統合ボタンをクリック 2つ以上のグループが選択されている場合、統合ダイアログを表示する
7 統合ダイアログで統合先を選択して実行 選択したグループを統合先グループに統合する(ソースグループは削除)
8 グループを展開して主催者を選択 ドロップダウンで主催者を選択する(新規主催者の追加も可能)
9 主催者の保存ボタンをクリック 主催者の設定を保存する

セッション管理

# 操作 振る舞い
10 グループ展開時にセッションボタンをクリック セッション編集パネルに詳細を表示する
11 セッション名を編集 セッションの別名を編集する(256文字以内)
12 参照 URL を編集 セッションの参照 URL を編集する
13 講師を選択・追加 ドロップダウンで講師メンバーを選択する(複数選択可能、新規メンバーの追加も可能)
14 セッションの保存ボタンをクリック セッションの変更を保存する(新しいリビジョンを作成)

共通操作

# 操作 振る舞い
15 戻るボタンをクリック ダッシュボードに戻る

画面遷移

方向 遷移先 条件
ダッシュボード 戻るボタン

権限

  • 管理者のみアクセス可能(未認証の場合、ダッシュボードにリダイレクトされる)
  • SAS トークンによる認証が必要(URL クエリパラメーター token で認証)

関連する業務