QuoteServices Change Status Archive

API:

POST /quote_services/change_status/archive/{quote_service_id}.json

功能說明

provider 在前端刪除公司資料時呼叫。前端文案是「刪除公司」,後端實際行為是把 quote_services.is_archived 設為 1,寫一筆 ArchiveService activity,並送出服務封存相關 task event。

成功 response:

{"error":0,"status":"Success"}

快速結論

  • actor:service owner,需有效 REST API key 與 user session token。
  • legacy API:QuoteServicesController::change_status('archive', $quote_service_id)
  • new API:已補 Endpoint/V1/QuoteServices.php::change_status_archive()
  • routing:已補 /quote_services/change_status/archive/{quote_service_id}.json
  • DB side effect:
    • quote_services.is_archived = 1
    • 新增 quote_activitiesquote_activity_type_id = 31 (ArchiveService)
    • 新增 task_event_queuegreserve_archived
    • 新增 task_event_queueservice_update

greserve_archived 是 legacy 既有 task event key;greserve 在本專案代表 Google Reserve,搬移時需保留原字串。

前端呼叫鏈:/dashboard/profilesServicesContainer.onDeleteService()serviceActions.deleteService()APIManager.archiveService()

Legacy Rule

legacy 檔案:

/Users/mattsu/Documents/Site/get-lancer-php56/app/Plugin/Quotes/Controller/QuoteServicesController.php:3452

archive 分支:

  1. JSON request 且 session 有效時,限制只能操作自己的 QuoteService.user_id
  2. 找不到 service 時回 {"error":1,"status":"Invalid request"}
  3. 找到 service 時設定 QuoteService.is_archived = 1
  4. 先送 greserve_archived task event,參數含 user_idquote_service_id
  5. save 成功後回 {"error":0,"status":"Success"}
  6. 建立 ArchiveService activity。
  7. 再送 service_update task event,參數同上。

New 實作成功後的 response 與 side effect 和 legacy 對齊。唯一順序差異是:legacy 在 save 前先送 greserve_archived,new 先更新 is_archived,再送 greserve_archived / service_update,避免 worker 先讀到未封存狀態。

同入口其他 filter

profile_ready 雖然同屬 change_status,但會進 _handle_profile_ready(),包含:

  • active / archived 狀態更新
  • user onboard_state
  • 免費點數與 wallet / transaction / wallet balance log
  • newQuoteService task queue
  • provider ready email

已另開文件與測試,見 profile_ready.md。維護時不可套用 archive 的簡單狀態更新結論。

New PHP 8.2 對照

new 檔案職責狀態
Lib/Common/RouterRule/Mapping.phproute legacy path 到 QuoteServices::change_status_archive()已補
Endpoint/V1/QuoteServices.php::change_status_archive()owner guard、封存、activity、task event、response已補
tests/QuoteServicesChangeStatusArchiveTest.phpsuccess + 非 owner guard已補

測試

docker exec -w /project-data cd63f9147e8d vendor/bin/phpunit tests/QuoteServicesChangeStatusArchiveTest.php

測試覆蓋:

  • owner 可以封存自己的 quote service。
  • 成功後 is_archived = 1
  • 成功後建立 ArchiveService activity。
  • 成功後送 greserve_archivedservice_update task event。
  • 非 owner 回 legacy invalid request,不寫 side effect。