SearchAdd Pre Create Guards
快速結論
這段是在 quote_requests 建立前的所有 early return。命中時不應建立 request。
current 入口:
SearchAddHandler::handle()
-> CategoryQuery
-> FormCategoryValidator
-> RiskControlGuard
-> SameCategoryServiceConflictGuard新舊程式對應
Legacy PHP 5.6
主要入口:
/Users/mattsu/Documents/Site/get-lancer-php56/app/Plugin/Quotes/Controller/QuoteRequestsController.php::search_add()| legacy guard | 職責 |
|---|---|
| category not found | category 不存在或 form/category 不一致時回 legacy error。 |
| form category mismatch | 第一題 form 與 category 不一致時擋下。 |
| risk control | 海外 / duplicate / phone / abuse 類建單前風控。 |
| same category service conflict | 同分類 provider conflict guard。 |
Current PHP 8.2
| current 位置 | 職責 |
|---|---|
Lib/SearchAdd/SearchAddHandler.php:139-155 | category 與 first form field validation。 |
Lib/SearchAdd/SearchAddHandler.php:195-203 | RiskControlGuard early return。 |
Lib/SearchAdd/SearchAddHandler.php:205-214 | SameCategoryServiceConflictGuard early return。 |
Lib/SearchAdd/RiskControlGuard.php | 風控實作。 |
Lib/SearchAdd/SameCategoryServiceConflictGuard.php | 同分類 provider conflict。 |
行號對照
| new 行號 | 對應 legacy | 職責 |
|---|---|---|
SearchAddHandler.php:139-147 | QuoteRequestsController.php:1863-1892 | category 不存在時回 error=1;有 form 但 category 不合時回 error=13。 |
CategoryQuery.php:12-23 | QuoteRequestsController.php:1865-1871 | 查 category 是否存在。 |
SearchAddHandler.php:149-155 | QuoteRequestsController.php:1894-1911 | 第一個 form field 的 category 必須與 request category 一致。 |
FormCategoryValidator.php:13-38 | QuoteRequestsController.php:1894-1911 | 查第一個 form field 所屬 category 並回 validation 結果。 |
SameCategoryServiceConflictGuard.php:21-58 | QuoteRequestsController.php:1913-1924, 2424-2437 | provider / 關聯帳號已有相同專業服務時回 error=10。 |
SearchAddHandler.php:195-203 | QuoteRequestsController.php:2336-2418 | 建單前主線風控 early return。 |
RiskControlGuard.php:21-30 | QuoteRequestsController.php:2336-2347 | phone 未驗證回 error=6。 |
RiskControlGuard.php:32-41 | QuoteRequestsController.php:2349-2361 | blocked user 回 error=5。 |
RiskControlGuard.php:43-67 | QuoteRequestsController.php:2363-2396 | 海外電話與 12 小時內重複需求回 error=14。 |
RiskControlGuard.php:69-79 | QuoteRequestsController.php:2398-2418 | 24 小時內同 category open request >= 5 回 error=4。 |
SearchAddHandler.php:205-214 | QuoteRequestsController.php:2420-2437 | production same-category related account guard。 |
Side Effects
正常情況不應有 request-side DB write。
如果 guard 前的 actor resolution 已做 auto signup,可能已有 actor-side side effects;但不應有新 quote_requests。
不可改變的契約
- guard 命中時不可建立
quote_requests。 - error code / message 要維持 legacy。
- category 不存在但有 form 與沒有 form 的錯誤語意不同。
- form/category mismatch 要在建單前擋下。
Verification
主要測試:
tests/SearchAddStep8IntegrationTest.php待確認 / 風險
- 若後續新增 guard,需明確標示它是在 actor 前、actor 後、還是 request create 後,避免 side effect 判讀錯誤。