Change Status Completed / Closed

對應 legacy:

/quote_bids/change_status/completed/{quote_bid_id}.json
/quote_bids/change_status/reviews/{quote_bid_id}.json with is_completed=1
/quote_bids/change_status/reviews/{quote_bid_id}.json with is_closed=1

快速結論

  • 用途:標記 work completed / payment completed。
  • actor:consumer 或 provider,依狀態與 request data 判斷。
  • new API:目前沒有獨立 completed route;現行 reviews action 不接 is_completed / is_closed 狀態參數。
  • legacy:completed 會轉進 reviews 分支。
  • 2026-05-12 正式機 get-lancer_access.log* 查詢:completed 0 筆,reviews + is_completed=1 0 筆,reviews + is_closed=1 0 筆。
  • 2026-06-18 狀態同步:已確認現況,近期正式流量為 0,暫不列下一支 migration 候選;若後續出現流量,再獨立補 migration。

completed alias

legacy 先把:

filter = completed
is_completed = 1
skip_review = 1
is_creator = actor 是否為 consumer

再進 reviews 分支。

is_completed 規則

成功條件:

  • quote bid 已 hired,或 provider side status 已 hired。

成功 side effect:

  • quote_bids.quote_status_id = Hired
    • quote_status_id = WorkCompleted
    • provider_status_id = WorkCompleted
    • completed_on = now
  • 若只有 provider side hired:
    • provider_status_id = WorkCompleted
  • 更新 quote_feedbacks.quote_status_id = WorkCompleted
  • 寫 BidStatusChange activity
  • 可能處理 Wallet / Sudopay book-it amount

is_closed 規則

成功條件:

  • quote bid 已 WorkCompleted,或 provider side status 已 WorkCompleted。

成功 side effect:

  • quote_bids.quote_status_id = WorkCompleted
    • quote_status_id = PaymentCompleted
    • provider_status_id = PaymentCompleted
    • closed_on = now
  • 若只有 provider side WorkCompleted:
    • provider_status_id = PaymentCompleted
  • 寫 BidStatusChange activity
  • 可能處理 Wallet / Sudopay payment completed

後續處理

  • 不要把 completed 只當成另一個 review API。
  • 這條其實是 quote bid lifecycle 狀態流。
  • 若後續有正式流量或產品確認需要恢復,建議獨立 helper,不要塞進 ChangeStatusReviewsHelper 裡越塞越大。