狀態調整小抄

調整前先記錄原值,測完要還原。建議只在 staging / local 測試 DB 使用。

Phone Guard

-- 通過 phone guard
UPDATE users
SET is_phone_confirmed = 1
WHERE id = <user_id>;
 
-- 模擬 phone 未驗證
UPDATE users
SET is_phone_confirmed = 0
WHERE id = <user_id>;

Wallet 分支

-- 模擬 wallet 足額
UPDATE users
SET available_wallet_amount = 1000
WHERE id = <provider_user_id>;
 
-- 模擬 wallet 不足
UPDATE users
SET available_wallet_amount = 0
WHERE id = <provider_user_id>;

注意:手動改 wallet 只適合測 guard 或分支。真實扣款流程還會寫 wallet_balance_logstransactionsquote_user_subscription_logs

Auto Quote Card / Prime 分支

prime 是 request 帶來的一次性 TapPay token,不會存在 usersstripe_customers。沒有 prime 時,流程只能使用 provider 既有 card。

-- 讓 provider 有可用 default auto quote card
UPDATE stripe_customers
SET is_valid = 1,
    is_default = 1,
    is_auto_quote = 1,
    is_remove = 0,
    is_self_remove = 0,
    invalid_time = NULL
WHERE id = <stripe_customer_id>
  AND user_id = <provider_user_id>;
 
UPDATE users
SET is_auto_quote_on = 1,
    last_card_invalid_time = NULL
WHERE id = <provider_user_id>;
-- 模擬沒有可用 auto quote card
UPDATE stripe_customers
SET is_valid = 0
WHERE user_id = <provider_user_id>
  AND is_auto_quote = 1;
 
UPDATE users
SET is_auto_quote_on = 0,
    last_card_invalid_time = NOW()
WHERE id = <provider_user_id>;

封鎖 / 解除封鎖使用者

判斷一個 user 是否能正常使用,不只看 users.is_active。測 quote / match / contact 前,至少確認:

users.is_active = 1
users.is_phone_confirmed = 1
blocked_users 沒有 is_active=1
blocked_user_configs 沒有 is_active=1
blocked_user_configs.is_active_disable_match = 0
blocked_user_configs.is_active_disable_request_match = 0
user_tags 沒有 active fraud tag

如果要讓使用者「正常可用」,用這組:

UPDATE users
SET is_active = 1,
    is_phone_confirmed = 1
WHERE id = <user_id>;
 
UPDATE blocked_users
SET is_active = 0,
    modified = NOW()
WHERE user_id = <user_id>;
 
UPDATE blocked_user_configs
SET is_active = 0,
    need_pass_identify = 0,
    need_upload_certificate = 0,
    need_apply_third_party_payment = 0,
    is_active_disable_match = 0,
    is_active_disable_request_match = 0,
    modified = NOW()
WHERE user_id = <user_id>;
 
DELETE FROM user_tags
WHERE user_id = <user_id>
  AND tag = 'fraud';

如果要測「使用者被封鎖」的錯誤情境,用這組:

INSERT INTO blocked_users (created, modified, user_id, blocked_user_id, reason, is_active)
VALUES (NOW(), NOW(), <user_id>, <user_id>, 'staging test', 1)
ON DUPLICATE KEY UPDATE
  modified = NOW(),
  reason = VALUES(reason),
  is_active = 1;

如果要測 fraud tag 錯誤情境,用這組:

INSERT INTO user_tags (user_id, tag, is_public, start_date, end_date, json_data)
VALUES (<user_id>, 'fraud', 0, NOW(), NULL, NULL);

如果要測「需補身份 / 風控 config 擋下」的錯誤情境,用這組:

UPDATE blocked_user_configs
SET is_active = 1,
    need_pass_identify = 1,
    modified = NOW()
WHERE user_id = <user_id>;

Quote Service 可用性

-- 啟用 service
UPDATE quote_services
SET is_active = 1,
    is_archived = 0,
    prohibited_type = 0,
    confirmed_prohibited_type = 0,
    modified = NOW()
WHERE id = <quote_service_id>;
 
-- 模擬 service 不可用
UPDATE quote_services
SET is_active = 0,
    modified = NOW()
WHERE id = <quote_service_id>;

Category-Level Auto Quote

-- 開啟特定 service-category auto quote
UPDATE quote_service_categories
SET is_auto_quote_on = 1,
    budget = 800,
    balance = 800,
    is_pricing_ready = 1,
    auto_quote_off = NULL,
    modified = NOW()
WHERE quote_service_id = <quote_service_id>
  AND quote_category_id = <quote_category_id>;
 
-- 關閉特定 service-category auto quote
UPDATE quote_service_categories
SET is_auto_quote_on = 0,
    budget = 0,
    balance = 0,
    modified = NOW()
WHERE quote_service_id = <quote_service_id>
  AND quote_category_id = <quote_category_id>;