狀態調整小抄
調整前先記錄原值,測完要還原。建議只在 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_logs、transactions、quote_user_subscription_logs。
Auto Quote Card / Prime 分支
prime 是 request 帶來的一次性 TapPay token,不會存在 users 或 stripe_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>;