43720482c4
Run Tests / test (pull_request) Successful in 2m3s
實作 openspec change provider-verification-workflow(25/25 tasks): - is_verified 升級為 verification_status 四狀態機(unsubmitted/pending/ approved/rejected),migration 自動轉換既有資料,API 以 accessor 保留 is_verified 相容輸出 - 教練端:證照上傳(≤3 張、複用 CompressesImages)、送審、駁回原因 顯示與重送(/coach/verification 新頁面) - Admin 端:審核佇列、通過/駁回(原因必填)、撤銷 approved;移除 toggle-verified 端點(防繞過狀態機);裁決後 flush 課程快取 - 通知:審核通過/駁回(站內+Email,駁回含原因) - 可見性與預約入口改判 approved(行為等價) - 測試 +18(ProviderVerificationTest 10、AdminVerificationTest 8), 既有 4 個測試檔 helper 遷移;Swagger 同步 - 規格同步:provider-verification 全面改寫、admin-user-management toggle 段落改為移除聲明 容器內全套件 173 passed / 439 assertions。 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2.6 KiB
2.6 KiB
Why
目前教練驗證只有一顆 Admin 的 is_verified 開關(2026-06-11 修補後具備可見性約束力),但沒有審核「流程」:教練無從提交資質證明、Admin 沒有審核依據與佇列、駁回無原因可言、結果無通知。路線圖(docs/analysis/2026-06-11-future-roadmap-feasibility.md §2.1)將此列為金流前的信任基礎建設。
What Changes
- 資料模型:
provider_profiles.is_verified(boolean)升級為verification_status狀態機——unsubmitted(註冊預設)→pending(已送審)→approved/rejected(含rejection_reason);新增provider_certifications資料表存證照圖片 - 教練端:後台新增「驗證申請」頁——上傳證照(1~3 張,複用
CompressesImages壓縮管線)、送審、查看駁回原因、重新送審(產品決策:註冊後補件送審,不擋註冊流程) - Admin 端:審核佇列(pending 優先)、查看證照、通過/駁回(駁回原因必填);移除舊
toggle-verified開關端點(與狀態機衝突) - 通知:審核通過/駁回通知教練(站內 + Email,複用 notification 管線)
- 相容性:
ProviderProfile以 accessor 保留 API 輸出的is_verified欄位(= status 是否為 approved);visibleToPublicscope 與預約入口檢查改查verification_status = 'approved',語意不變
Capabilities
Modified Capabilities
provider-verification:boolean 語意升級為四狀態機;新增教練送審端點、Admin 審核端點、通知 requirements;可見性規則改以approved判定(行為等價)admin-user-management:toggle-verified端點移除,由 approve / reject 取代
Impact
- 資料庫:migration 轉換既有資料(
is_verified=true → approved、false → unsubmitted)、新表provider_certifications - 後端:新增
ProviderVerificationController、AdminVerificationController、2 個 Notification class;修改DivingOffer::visibleToPublic、MemberBookingController、AdminUserController(移除 toggle)、ProviderProfile、兩個 Seeder - 前端:新增
coach/VerificationView.vue;改admin/ProvidersView.vue(狀態 badge、審核操作) - 測試:既有用到
is_verified的 4 個測試檔改用verification_status;新增送審流程與審核權限測試 - 行為變更:Admin 不再能單鍵切換驗證,必須走審核流(撤銷 = 駁回既有 approved 教練並附原因);既有預約不受狀態變動影響(沿用 provider-verification 規格既定政策)