Skip to content

ADM-017 機種マスタ管理画面 ​

概要 ​

  • db_kishu_master の一覧・新規登録・名称変更・統合(merge)・無効化・ヒートマップ略称・メーカー(maker_id)選択を行う専用管理画面。
  • WordPress 設定サブメニューとして登録。操作はすべて 同一 URL への POST(リダイレクト+クエリ通知)。admin-ajax は使用しない。
  • rename / merge / 無効化は確認ダイアログ必須。merge 実行前に影響件数プレビュー(ドライラン)を表示できる。
  • メーカーは db_maker_master を参照する(ADM-031)。未設定は空選択(maker_id NULL)。

外部インターフェース ​

管理画面 URL ​

項目値
URL/wp-admin/options-general.php?page=kishu-master-admin
メニュー名機種マスタ
権限manage_options

フォーム POST(同期 CRUD / merge) ​

POST options-general.php?page=kishu-master-admin。

kishu_master_action 値処理
add新規登録(upsert_by_names、重複は uk_name で拒否)
rename名称変更(update_name、確認ダイアログ必須)
deactivate無効化(is_active = 0、確認ダイアログ必須)
merge_preview統合の影響件数プレビュー(ドライラン)
merge統合実行(業務4テーブルの kishu_id 差し替え+旧行 DELETE、確認必須)
update_abbreviationヒートマップ略称の更新(編集フォーム)
update_makerメーカー(maker_id)の更新(編集フォーム)
update_row一覧のインライン更新(機種名・ヒートマップ略称・メーカー)

Nonce フィールド: kishu_master_nonce(検証アクション: kishu_master_admin)

主な POST パラメータ ​

フィールド操作説明
kishu_master_idrename / deactivate / update_*対象 ID
kishu_master_nameadd / rename / update_row機種名(必須、最大 255 文字)
kishu_master_heatmap_abbreviationupdate_abbreviation / update_rowヒートマップ略称(任意)
kishu_master_maker_idupdate_maker / update_rowメーカーマスタ ID(任意。空文字は NULL)
kishu_master_source_idmerge_preview / merge統合元 ID
kishu_master_target_idmerge_preview / merge統合先 ID

リダイレクト後クエリ(通知) ​

クエリ内容
km_success1 / 0
km_msg表示文言(URL エンコード)

編集・プレビュー用 GET ​

GET パラメータ説明
km_edit名称変更・略称・メーカー編集対象 ID
km_search機種名部分一致検索
km_merge_preview1 のときプレビュー結果表示
km_source_idプレビュー対象の統合元 ID
km_target_idプレビュー対象の統合先 ID

一覧 URL のエンコード ​

ソートリンク・編集リンクとリダイレクト先はいずれも build_list_page_url() が組み立てる。add_query_arg() は値をエンコードしないため、AdminQueryUrl が渡された生値を 1 回だけ URL エンコードする(通知の km_msg も同じ扱い)。生値のままだと & や # を含む機種名で検索したときに条件や文言が途中で切れる。

既知の制約: 受け取り側の sanitize_text_field() は % + 16 進 2 桁を削除するため、A%2Bb のような検索語は往復で値が変わる。

データ ​

テーブル: db_kishu_master ​

カラム説明
id主キー
name機種名(uk_name)
is_active有効フラグ
heatmap_abbreviationヒートマップ表示用略称(任意)
maker_idメーカーマスタ ID(任意。論理 FK)
created_at / updated_atタイムスタンプ

ID(AUTO_INCREMENT)の飛び番 ​

id は業務上の参照キーであり連番である必要はない。一覧で ID が大きく飛ぶ場合でも、無効行の隠れやデータ欠損を意味しない。

主な要因:

  • 過去の一括登録経路: INSERT IGNORE は UNIQUE 衝突でも InnoDB が AUTO_INCREMENT を進める。日次インポート等は未登録名だけ upsert する実装に揃えているが、過去に既存名へ繰り返し IGNORE した期間の消費分は残る
  • 統合(merge): 統合元マスタ行を物理 DELETE するため、その ID が空き番になる

既存 ID の振り直しは他テーブルの kishu_id との整合コストが大きいため行わない。

一覧の参照件数サマリ ​

列名参照先
mappingdb_kishu_display_mapping.kishu_id 参照件数
db2023db2023.kishu_id
summarydb_daily_article_kishu_single_day_summary.kishu_id
deltadb_daily_article_kishu_count_delta.kishu_id
birthdaydb_birthday_kishu.kishu_id

merge 時の業務テーブル更新 ​

KishuIdBackfillRepository::update_kishu_id_from_to により次の4テーブルを更新する。

  • db2023
  • db_daily_article_kishu_single_day_summary
  • db_daily_article_kishu_count_delta
  • db_birthday_kishu

db_daily_article_kishu_single_day_summary と db_daily_article_kishu_count_delta は UNIQUE (hall, period_key, kishu_id) を持つ。同一ホール×日付に統合元・統合先の両方の行がある場合は、数値列を加算して統合先行に寄せてから統合元行を DELETE する(delta の加算結果が 0 のときは行ごと削除)。summary の順位列は統合先の値を維持する。avg_kaiten は NULL を 0 にしない(両側ありは加重平均、片側のみは非 NULL 側、両側 NULL は更新しない)。旧文字列リネーム用 trait とは別経路(kishu_id 前提・上記差分あり)。不正な source 行は fail-fast で統合全体を中断する。

更新後、KishuMasterRepository::delete_by_id で統合元マスタ行を物理削除する。

プレビューでは summary / delta の hall×period 衝突件数も表示する。

エラー ​

条件ユーザー向け挙動メッセージ / ログ
nonce 不正リダイレクト+エラーMessages::AUTH_FAILED
必須項目空・長さ超過リダイレクト+エラーKishuMasterAdminMessages::*
名称重複リダイレクト+エラーADD_DUPLICATE
merge 同一 IDリダイレクト+エラーMERGE_SAME_ID
merge DB 失敗リダイレクト+エラーMERGE_FAILED(ErrorHandler にログ)
無効な maker_idリダイレクト+エラーMAKER_INVALID