search_add

目的

search_add 是 consumer 發案主流程。它會建立 quote_requests,並依照配對規則產生多筆 quote_bids

這篇先聚焦 quote bid 狀態,不展開所有表單與使用者建立細節。

完整 API trace 請看 業務流程/search_add。這篇只回答 search_add 對 quote_bids 的影響。

主流程簡圖

consumer submit search_add
-> 建立 / 解析 user
-> 建立 quote_requests
-> 寫表單資料與 match info
-> 找符合條件的 quote_services
-> 建立 quote_bids
-> 初始化 bid 狀態
-> queue / activity / notification

主要資料表

階段資料表重點欄位
建立案件quote_requestsid, user_id, quote_category_id, match_type, auto_quote_sent_count
建立 bidquote_bidsquote_request_id, quote_service_id, provider_user_id, is_auto_quote
表單答案quote_form_submission_fieldsquote_request_id, form fields
配對資訊quote_request_match_infosquote_request_id, match metadata
活動紀錄quote_activitiesquote_request_id, quote_bid_id, quote_activity_type_id
非同步任務task_event_queue / task_event_queue_logevent_key, params

quote_bids 初始狀態

search_add 產生 auto quote bid 時,常見初始狀態是:

quote_bids.is_auto_quote = 1
quote_bids.is_contact_charge = 0 或 1
quote_bids.is_want_to_contact_provider = 0
quote_bids.contact_provider_on = NULL
quote_bids.quote_status_id = Send / InProgress 類狀態
quote_bids.provider_status_id = Send / InProgress 類狀態

重點是:

is_want_to_contact_provider = 0

代表 consumer 還沒有正式聯絡 provider,也通常還沒有進入 contact fee 扣款主線。

與 want_to_contact_provider 的關係

search_add 建出 quote card 後,consumer 看到 provider 卡片。當 consumer 按下聯絡 provider 時,才會進入:

/quote_bids/want_to_contact_provider/{quote_bid_id}.json

成功後才會把:

quote_bids.is_want_to_contact_provider = 1
quote_bids.contact_provider_on = NOW()

並可能產生:

  • transactions
  • quote_activities.AutoQuoteContact
  • task_event_queue.bid_contact_count
  • task_event_queue.sent_contact_provider_sms
  • messages

驗證 search_add 建 bid

查某個 request 產生了哪些 bids:

SELECT
  id,
  quote_request_id,
  quote_service_id,
  provider_user_id,
  is_auto_quote,
  is_contact_charge,
  is_want_to_contact_provider,
  contact_provider_on,
  quote_status_id,
  provider_status_id,
  total_site_fee,
  quote_user_subscription_log_id
FROM quote_bids
WHERE quote_request_id = <quote_request_id>
ORDER BY id DESC;

查 request 統計:

SELECT
  id,
  user_id,
  quote_category_id,
  sent_count,
  auto_quote_sent_count,
  auto_quote_contact_count,
  contact_charge_quote_count,
  contact_charge_contact_count,
  is_closed,
  is_archived,
  is_expired
FROM quote_requests
WHERE id = <quote_request_id>;

判斷重點

  • search_add 是 bid 建立來源之一。
  • search_add 建立 auto quote bid,不代表 consumer 已聯絡 provider。
  • 是否已正式聯絡,要看 quote_bids.is_want_to_contact_provider
  • 是否已扣款,要看 transactionsquote_user_subscription_log_id
  • queue 可能已被 worker 搬到 log,驗證時要同時查 queue 與 log。