Appearance
ADM-001-6 pworld_mail_bulk_save_article_links
概要
一覧上の複数行を一括して記事連携を保存する。検証は本エンドポイントで同期実行し、成功時は非同期ジョブを開始して job_id を返す。DB 更新は PworldArchiveAsyncRunner、完了後の一覧ペイロードは ADM-001-2 のポーリングで取得する(Issue #2052)。
POST パラメータ
| フィールド | 必須 | 説明 |
|---|---|---|
rows | 条件付き必須 | ネストした配列。各行に mail_id, hall_name, article_target_date, show_in_article(単体更新と同じ検証) |
mail_list_page | 任意 | 一覧のページ番号(1 以上。不正時は 1 にフォールバック)。ジョブ params に保存し完了時の一覧再取得に使う |
mail_list_subject_search | 任意 | 一覧再取得用フィルタ(ジョブ params にも保存) |
mail_list_date_from / mail_list_date_to | 任意 | 同上 |
挙動
- 現在のフィルタ・ページに対応する 一覧のメール ID 集合と、
rowsの ID 集合が 件数・内容とも一致しないとPWORLD_BULK_ARTICLE_LINK_COUNT_MISMATCH等で失敗(同期) - 行バリデーション失敗時は
mail_id付きで同期エラーを返す - 空一覧かつ空
rowsのときは同期のまま成功(updated_count: 0+ 一覧ペイロード) - 検証成功後は
PworldArchiveJobStateをjob_type=bulk_article_linkでrunningにし、pworld_archive_async_runを単発 WP-Cron 登録して即時startedを返す - 手動 IMAP 取得ジョブと同一 JobState / MySQL ロックを共有するため、他ジョブ実行中は
run_in_progressで失敗する
pworld_mail_archiveテーブルからデータ取得(更新対象)
| カラム名 | where | 検索値 |
|---|---|---|
id | ○ | rows[].mail_id |
hall_name | ||
article_target_date | ||
show_in_article |
(実 UPDATE は非同期 Runner 内の bulk_update_article_links トランザクションで実行。)
成功時 data(ジョブ開始)
| 論理名 | 物理名 | 型 |
|---|---|---|
| ジョブ状態 | status | string(固定値 started) |
| ジョブ ID | job_id | string |
| メッセージ | message | string(PWORLD_BULK_ARTICLE_LINK_STARTED) |
フロントは job_id で ADM-001-2 をポーリングする。完了時の updated_count / 一覧ペイロードは同エンドポイントの bulk done を参照。
その他
- 本ハンドラでは
set_time_limitを設定しない(重い処理は Runner 側で上限 120 秒)