Description
概要
パイレーツパスでヤマダポイントがもらえるキャンペーンが開催できていなかったため、途中開催をした。
開催前に消費した紅玉を進捗に反映させる
実装方法がわからなかったため大部分をAIで実装している
対象がヤマダユーザーかつゲストでない人に絞っている
( 確認した内容 : master_yamada_campaignで本日分のヤマダポイントミッションを非開催にしてして紅玉消費 → スクリプト実行 → ミッション開催後に開催後に紅玉消費の進捗が反映されていることを確認)
実行方法ENVIRONMENT=development PF=yamada IS_DOCKER=true php backfill_yamada_pass_daily_progress.php --dry-run --dry-run-sql
目的 / 意図
本日分の紅玉消費(log_daily_stamina)を使って、user_season_pass.daily_progresses の sequence_no=9 を不足分だけ補正する。
Yamada_point_pass_quest の設定(border_count)を上限として反映し、既存値より小さくはしない(再実行しても壊れない冪等性)。
範囲 / 条件
log_daily_stamina 当日分のみ対象。
user_platform.pid = yamada かつ guest_flg = 0 のユーザーに限定。
user_season_pass が無い場合は --create-missing 指定時のみ作成(dry-runでは作成しない)。
dry-run 出力
dry-run時は backfill_yamada_pass_daily_progress_YYYY-mm-dd_seq9.txt に、各ユーザーの before → after を出力。
--dry-run-sql を付けると UPDATE 想定のSQL文字列も出力。
懸念点(運用リスク)
daily_progresses は JSON 全体保存のため、本番動作中に SeasonPass::track() が同時更新すると後勝ちで巻き戻る可能性がある。
回避策として「低負荷時間に実行」+「必要なら同日再実行」で追いつく想定。
ロックや JSON_SET + GREATEST の単一UPDATE方式は、デッドロック・運用リスクを避けるため今回は採用しない方針。
補足
対象日/件数/sequenceはオプションで指定可(--date / --limit / --sequence)。