Files
a620906209 80f5cf179f
Run Tests / test (pull_request) Failing after 1m53s
chore(openspec): 歸檔 feature-test-coverage、provider-verification-workflow 變更
兩個 change 全任務完成(feature-test-coverage 40/40、provider-verification-workflow 48/48)。

同步規格:
- feature-test-coverage/spec.md 補齊 ## Requirements 區塊標頭(結構修正)
- Admin 教練審核 scenario 改為 approve 端點(toggle-verified 已由 #36 移除)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-16 19:19:52 +08:00

3.2 KiB
Raw Permalink Blame History

1. 資料模型

  • 1.1 新增 App\Enums\VerificationStatusUnsubmitted / Pending / Approved / Rejected,含 VALID_TRANSITIONScanTransitionTo(),仿 BookingStatus 模式)
  • 1.2 Migrationprovider_profilesverification_statusstring, default 'unsubmitted')與 rejection_reasontext nullable);資料轉換 is_verified=true→approvedfalse→unsubmitteddrop is_verified
  • 1.3 Migration:新表 provider_certificationsid, user_id FK cascade, image_path, timestamps
  • 1.4 ProviderProfilefillable/casts 更新、is_verified accessorappends= approved)、certifications 由 User 關聯
  • 1.5 新 Model ProviderCertificationbelongsTo User、url accessor,仿 CourseImage

2. 教練端 API

  • 2.1 ProviderVerificationControllershowstatus + reason + certifications)、uploadCertification(≤3 張、複用 CompressesImages、僅 unsubmitted/rejected)、deleteCertification(僅本人 + 僅 unsubmitted/rejected)、submit(≥1 張證照、unsubmitted/rejected→pending、清 rejection_reason
  • 2.2 routes/api/provider/verification* 四端點(auth:sanctum + provider group

3. Admin 端 API

  • 3.1 AdminVerificationControllerindex?status= 預設 pending,含教練資料與證照)、approvepending→approved)、rejectpending|approved→rejectedreason 必填 max 500);approve/reject flush diving_offers 快取 + 通知教練
  • 3.2 routes/api/admin/verifications* 三端點;移除 toggle-verified route 與 AdminUserController::toggleProviderVerified
  • 3.3 AdminUserController::providers 列表回應含 verification_status

4. 可見性判定切換

  • 4.1 DivingOffer::visibleToPublicis_verified=trueverification_status='approved'
  • 4.2 MemberBookingController::store 可預約檢查同步改判 approved

5. 通知

  • 5.1 ProviderVerificationApprovedNotification + ProviderVerificationRejectedNotification(含原因;database + mail,仿 Booking* 模式)

6. Seeder

  • 6.1 DemoSeeder / DevelopmentSeederis_verifiedverification_status;demo 第 4 位教練給 1 張證照 + pending(展示佇列)

7. 前端

  • 7.1 views/coach/VerificationView.vue + route /coach/verification:狀態卡(四態 + 駁回原因)、證照上傳/刪除、送審;CoachLayout 側欄入口
  • 7.2 views/admin/ProvidersView.vuebadge 四態化、待審 filter、查看證照、通過/駁回(原因輸入);移除 toggle 呼叫

8. 測試

  • 8.1 既有測試遷移:DivingOfferVisibilityTest / BookingLifecycleTest / BookingOversellTest / ReviewTest 的 helper 改 verification_status
  • 8.2 ProviderVerificationTest(新):狀態機合法/非法轉移、證照上限/鎖定/本人限定、送審前置條件、重送清空原因
  • 8.3 AdminVerificationTest(新):佇列過濾、approve/reject 權限(非 admin 403)、reject 無原因 422、撤銷 approved、裁決後可見性立即生效(快取)、通知發送斷言、toggle 端點 404
  • 8.4 容器內全套件綠(基準 155 passed)

9. 規格同步

  • 9.1 specs 增量套用至主規格 provider-verificationadmin-user-management