PR

【確認でき次第 1/7中】ヤマダポイントクエスト当日紅玉消費進捗修正反映 #4459

kouho opened this at 2026-01-07T12:56:19; closed

Description

opened by kouho at 2026-01-07T12:56:19; updated 2026-01-08T16:12:39

概要

パイレーツパスでヤマダポイントがもらえるキャンペーンが開催できていなかったため、途中開催をした。
開催前に消費した紅玉を進捗に反映させる

実装方法がわからなかったため大部分を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)。

Comment

#43821 by kouho at 2026-01-07T12:56:42; updated 2026-01-07T12:56:42

@wada
レビューをお願いいたします

Comment

#43870 by kouho at 2026-01-08T16:12:34; updated 2026-01-08T16:12:34

対応を変更したためクローズ

kouho close at 2026-01-08T16:12:39: Close

Commit range

base76a2ff642969d54385f2e6db6ff4af80e9ba1811
head1ae11d753f2ea1e4cfb91abe5ead95a46e7cacbf
base branchjolly/jr-web:master
head branchjolly/jr-web:yamada_point_fix

View commits

Commit details are loaded from Git when a dynamic archive server is running, or can be embedded with --include-commits.
Files changed1 filesView patch
statusfile
addedlib/exec/backfill_yamada_pass_daily_progress.php
Patch body is stored as a separate file to keep this page lightweight.