QuoteRequests API

整理 quote_requests 與其直接改名路徑相關 API。

建議閱讀順序

目的文件
quote_requests 已深入調查的流程details/quote_requests/README.md
看已搬的 search_add 主流程index.md
看已搬的 copy 主流程index.md
security_hash 規則與流量結果details/quote_requests/security_hash.md
看舊 Web 多步驟發案入口details/quote_requests/add.md

Endpoint Inventory

Endpoint方法認證來源說明新專案對應狀態備註
/quote_requests/add.json待確認使用者 sessionapp/Plugin/Quotes/Controller/QuoteRequestsController.php:1220新增 quote request未找到未找到舊 Web 多步驟發案流程,與 search_add 不同;調查見 details/quote_requests/add.md
/quote_requests/json_response.json待確認不適用app/Plugin/Quotes/Controller/QuoteRequestsController.php:3946raw JSON response不需搬移不需搬移舊碼是 private function json_response(),屬 controller helper,非獨立 API action。
/quote_requests/static_fields.json待確認全域 API keyapp/Plugin/Quotes/Controller/QuoteRequestsController.php:3431static fieldsQuoteRequests::static_fields()同路徑已存在固定回傳空 StaticFormField;規則見 details/quote_requests/static_fields.md
/quote_requests/index.json待確認使用者 sessionapp/Plugin/Quotes/Controller/QuoteRequestsController.php:744quote request 清單QuoteRequests::index()同路徑已存在新專案 Endpoint/V1/QuoteRequests.php 有同名 action。
/quote_requests/change_status.json待確認使用者 sessionapp/Plugin/Quotes/Controller/QuoteRequestsController.php:1687改 quote request 狀態QuoteRequests::change_status()同路徑已存在新專案 Endpoint/V1/QuoteRequests.php 有同名 action;raw params 解析狀態與 id。
/quote_requests/security_hash.json待確認全域 API keyapp/Plugin/Quotes/Controller/QuoteRequestsController.php:4713security hashQuoteRequests::security_hash()同路徑已存在低風險相容 API;規則見 details/quote_requests/security_hash.md
/quote_requests/search_add.jsonPOST使用者 session + API keyapp/Plugin/Quotes/Controller/QuoteRequestsController.php:1805全域 API key 檢查例外;可 auto sign upSearchAdd::index()已搬;由專門文件維護已明確 routing 到 Endpoint/V1/SearchAdd.php,主流程與 legacy parity 文件見 index.md。判斷下一支 migration 時,不要因 access log 流量大就把它重新列為待搬候選。
/quote_requests/view.json待確認使用者 sessionapp/Plugin/Quotes/Controller/QuoteRequestsController.php:3477quote request detailQuoteRequests::view()同路徑已存在新專案 Endpoint/V1/QuoteRequests.php 有同名 action;另有 /quote_request/{id}.json mapping。
/quote_requests/copy/{quote_request_id}.jsonPOST使用者 session + API key,也支援 hash flowapp/Plugin/Quotes/Controller/QuoteRequestsController.php:4112copy quote requestQuoteRequests::copy()已搬;由專門文件維護新專案 Endpoint/V1/QuoteRequests.php::copy() 會轉交 Lib/QuoteRequestCopy/CopyRequestHandler.php;主要 caller 使用 path id,規則、baseline 與測試證據見 index.md
/quote_requests/edit.json已完成使用者 sessionapp/Plugin/Quotes/Controller/QuoteRequestsController.php:5828修改 request 電話可聯絡時間QuoteRequests::edit()同路徑已存在controller-only;legacy / 新版都只更新 phone_available_timeis_show_phone_to_providers。已補 legacy queue guard 與 tests/QuoteRequestsEditTest.php;詳見 details/quote_requests/edit.md
/quote_requests/leads.json待確認使用者 session + API keyapp/Plugin/Quotes/Controller/QuoteRequestsController.php:5932leadsQuoteRequests::leads()同路徑已存在新專案 Endpoint/V1/QuoteRequests.php 有同名 action。

search_add Form Payload Compatibility

/quote_requests/search_add.json 明確 routing 到新專案 Endpoint/V1/SearchAdd.php,但 form response 的 legacy contract 仍以純值字串為主。

Legacy QuoteRequestsController::search_add() 只對 Form[...]rawurldecode,實際寫入由 QuoteFormSubmission::submit() 處理;該 legacy writer 支援 checkbox 的 scalar list 語意,例如 ["A","B"] 轉成 "A,B",但沒有把 {"value":"A"}[{"value":"A"}] 攤平成純值的規則。

因此 current FormSubmissionWriter{value: ...} / [{value: ...}] 的處理是 migration compatibility guard,用來支援新版 client payload shape,不能誤解成 legacy 本來就有這個資料格式。travelpref 仍保留 JSON object 語意,不屬於這個攤平規則。