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_activities,quote_activity_type_id = 31(ArchiveService) - 新增
task_event_queue:greserve_archived - 新增
task_event_queue:service_update
greserve_archived 是 legacy 既有 task event key;greserve 在本專案代表 Google Reserve,搬移時需保留原字串。
前端呼叫鏈:/dashboard/profiles → ServicesContainer.onDeleteService() → serviceActions.deleteService() → APIManager.archiveService()。
Legacy Rule
legacy 檔案:
/Users/mattsu/Documents/Site/get-lancer-php56/app/Plugin/Quotes/Controller/QuoteServicesController.php:3452archive 分支:
- JSON request 且 session 有效時,限制只能操作自己的
QuoteService.user_id。 - 找不到 service 時回
{"error":1,"status":"Invalid request"}。 - 找到 service 時設定
QuoteService.is_archived = 1。 - 先送
greserve_archivedtask event,參數含user_id、quote_service_id。 - save 成功後回
{"error":0,"status":"Success"}。 - 建立
ArchiveServiceactivity。 - 再送
service_updatetask 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
newQuoteServicetask queue- provider ready email
已另開文件與測試,見 profile_ready.md。維護時不可套用 archive 的簡單狀態更新結論。
New PHP 8.2 對照
| new 檔案 | 職責 | 狀態 |
|---|---|---|
Lib/Common/RouterRule/Mapping.php | route legacy path 到 QuoteServices::change_status_archive() | 已補 |
Endpoint/V1/QuoteServices.php::change_status_archive() | owner guard、封存、activity、task event、response | 已補 |
tests/QuoteServicesChangeStatusArchiveTest.php | success + 非 owner guard | 已補 |
測試
docker exec -w /project-data cd63f9147e8d vendor/bin/phpunit tests/QuoteServicesChangeStatusArchiveTest.php測試覆蓋:
- owner 可以封存自己的 quote service。
- 成功後
is_archived = 1。 - 成功後建立
ArchiveServiceactivity。 - 成功後送
greserve_archived與service_updatetask event。 - 非 owner 回 legacy invalid request,不寫 side effect。