Skip to content

ADM-18 日別データ削除 管理画面 ​

概要 ​

  • 誤インポートや想定外のデータ登録時に、指定した日付×ホールの台別データおよびインポート時に更新される派生データを削除する管理画面。
  • 削除処理は DailyDataImportService::delete_by_date_hall_pairs() 経由で行い、インポート完了時と同じ slot_kouryaku_daily_data_imported フックでサマリ・ランキングを再計算する。

外部インターフェース ​

管理画面 URL ​

項目値
URL/wp-admin/admin.php?page=daily-data-delete-admin
メニュー名日別データ削除
権限manage_options

フォーム POST(同期) ​

POST admin.php?page=daily-data-delete-admin。

パラメータ説明
ddd_actiondelete のとき削除実行
ddd_date対象日(type="date")
ddd_halls[]削除対象ホール(HallEnum value)

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

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

クエリ内容
ddd_success1 / 0
ddd_msg表示文言(URL エンコード。esc_html して管理通知として出力)
ddd_dateフォームに戻す日付(任意。URL エンコード。検証前の入力を乗せるため、生値だと後続クエリを壊す)

URL は App\Util\AdminQueryUrl::build() で組み立てる。同クラスが値を rawurlencode() するため、呼び出し側は生値を渡す(rawurlencode() 済みの値を渡すと二重エンコードになり、受け取り側の sanitize_text_field() が %xx を削除して文言が消える)。

日付の形式が不正なときも入力値を ddd_date に載せて戻すが、入力欄は <input type="date"> のためブラウザは不正値を描画せず空表示になる。削除対象プレビューも 0 件になる。

削除対象 ​

データテーブル / 保存先削除の仕組み
台別 rawdb2023DailyDataPerUnitRepository::batch_delete_by_date_hall_pairs で直接 DELETE
機種別サマリdb_daily_article_kishu_single_day_summaryフック後の replace_all_for_hall_and_period(空行でクリア)
台数変化db_daily_article_kishu_count_delta同上 + 翌日サマリが存在する場合は N+1 日カスケード再計算
事前計算ランキングslot_precomputed_rankingフック後の PrecomputedRankingComputer::compute_and_store
テンプレートキャッシュTransientDailyArticleTemplateDataService による日付×ホール単位クリア

フック実行順: AdminServiceProvider では Summary ハンドラを PrecomputedRanking より先に実行する。削除直後に陳腐化したサマリからランキングが再計算されるのを防ぐ。

削除対象外 ​

データテーブル理由
機種マスタdb_kishu_masterインポート時は INSERT IGNORE のグローバルマスタ。他日付・他機能から FK 参照される
表示マッピングdb_kishu_display_mapping生機種名単位のグローバルマッピング。他日付のインポートでも共有される

機種マスタの孤立行 GC(削除対象日にのみ出現し他参照が無い場合のみ削除)は本画面では行わない。

実装参照 ​

種別パス
画面core_src/Admin/daily_data_delete/DailyDataDeleteAdminPage.php
メッセージcore_src/Constants/DailyDataDeleteMessages.php
削除 APIcore_src/Service/daily_data_import_service/DailyDataImportService.php
バッチ設計docs/design/バッチ/daily-article-summary-batch.md

関連 ​