Appearance
会場の利用可リストの仕様
主催組織ごとに 「使える会場」を明示登録する「利用可リスト」の仕様をまとめます。実装(apps/api の manage/masters.ts・manage/tournaments.ts と管理画面 /manage/masters/venues)に基づく現状仕様です。
会場マスタ自体は全主催組織で 共通(住所・設備などの会場情報は 1 つ)です。「どの組織がどの会場を使えるか」だけを組織ごとに持つ、という設計です。基盤は マルチ主催組織 / アカウント体系 を参照してください。
1. 基本方針
- 会場(
venues)は 共通マスタ。会場情報の編集は システム管理者のみ。 - 「その組織が使える会場」は 利用可リスト(
organizer_venues) で組織ごとに持ちます。 - 明示登録必須:利用可リストに登録した会場だけが使えます。登録が無ければ会場ゼロ(大会エディタで会場を選べない)。
- システム管理者の全組織モードは例外で、常に全会場を扱えます。
なぜ「明示登録必須」か
「登録が無ければ全会場が使える」方式にすると、組織を絞り込む運用ができません。明示登録にすることで、各組織が扱う会場を意図的にコントロールできます。代わりに、新しい組織は 最初に利用可会場を登録するまで会場が空 になる点に注意します(第 5 節の移行も参照)。
2. 効き方(どこで絞られるか)
| 場面 | 挙動 |
|---|---|
| 大会エディタの会場選択 | 操作中組織の 利用可リストにある会場だけ を候補に出す |
| 大会の保存(API) | 指定された会場が その大会の主催組織の利用可リストにあるか検証。無ければ保存不可(400) |
| システム管理者(全組織モード) | 絞り込みなし。全会場を候補に出す |
画面で絞っても API でも検証する
会場の絞り込みはエディタ画面だけでなく、保存時に API 側でも検証します。画面の不具合や不正なリクエストで利用可リスト外の会場が紐づくのを防ぎます(レベル・賞品の所属検証と同じ考え方)。
3. 利用可リストの管理(/manage/masters/venues)
- 会場マスタ画面に 「利用可会場」セクションがあり、共通会場の一覧に対して 利用可 ON/OFF をチェックで切り替えます。
- 操作できるのは その組織のマスタ編集権限を持つメンバー(admin / editor) とシステム管理者です(会場情報そのものの編集はシステム管理者のみ、という軸とは別)。
- ON にするとその組織の利用可リストに登録、OFF にすると登録解除されます。
操作の前提
| チェック | 外れたときの挙動 |
|---|---|
| ログイン済みか | 401 |
その組織で masters 編集権限を持つか | 403 |
| 対象の主催組織が選ばれているか | 400(全組織モードでは利用可会場を編集できない) |
| 対象の会場が存在するか | 404 |
4. データの持ち方
| テーブル | 役割 |
|---|---|
venues(共通) | 会場情報(住所・設備など)。全組織共通 |
organizer_venues | 主催組織 × 会場の 利用可リスト。行があれば「その組織はその会場を使える」 |
organizer_venuesの主キーは(organizer_id, venue_id)。同じ組織・会場の重複登録はできません。- 会場や組織が削除されれば、対応する利用可リストの行も連鎖削除されます。
5. 既存データの移行(バックフィル)
本機能の導入前は利用可リストの概念が無く、どの組織でも全会場を選べました。「明示登録必須」に切り替えると、既存の組織はそのままでは会場ゼロになってしまいます。
そこで導入時のマイグレーションで、その時点の全組織 × 全会場を一度だけ利用可リストに投入し、既存の挙動を壊さないようにしています(冪等。複数回流しても重複しません)。導入後に各組織が必要に応じて会場を絞り込めます。
開発用シードとの違い
開発環境の再シードは、利用可リストの「空=会場ゼロ」の挙動を確認できるよう、先頭の組織にだけ全会場を登録します(他組織は空)。これはテスト用のフィクスチャで、上記の本番バックフィルとは独立です。
関連
- マルチ主催組織 / アカウント体系 —
organizer_venuesを含むスキーマ計画 - メンバー管理の仕様 — 同じ「操作中組織」スコープで動く管理機能