80f5cf179f
Run Tests / test (pull_request) Failing after 1m53s
兩個 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>
3.2 KiB
3.2 KiB
1. 資料模型
- 1.1 新增
App\Enums\VerificationStatus(Unsubmitted / Pending / Approved / Rejected,含VALID_TRANSITIONS與canTransitionTo(),仿 BookingStatus 模式) - 1.2 Migration:
provider_profiles加verification_status(string, default 'unsubmitted')與rejection_reason(text nullable);資料轉換is_verified=true→approved、false→unsubmitted;dropis_verified - 1.3 Migration:新表
provider_certifications(id, user_id FK cascade, image_path, timestamps) - 1.4
ProviderProfile:fillable/casts 更新、is_verifiedaccessor(appends,= approved)、certifications由 User 關聯 - 1.5 新 Model
ProviderCertification(belongsTo User、url accessor,仿 CourseImage)
2. 教練端 API
- 2.1
ProviderVerificationController:show(status + 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
AdminVerificationController:index(?status= 預設 pending,含教練資料與證照)、approve(pending→approved)、reject(pending|approved→rejected,reason 必填 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::visibleToPublic:is_verified=true→verification_status='approved' - 4.2
MemberBookingController::store可預約檢查同步改判 approved
5. 通知
- 5.1
ProviderVerificationApprovedNotification+ProviderVerificationRejectedNotification(含原因;database + mail,仿 Booking* 模式)
6. Seeder
- 6.1 DemoSeeder / DevelopmentSeeder:
is_verified改verification_status;demo 第 4 位教練給 1 張證照 + pending(展示佇列)
7. 前端
- 7.1
views/coach/VerificationView.vue+ route/coach/verification:狀態卡(四態 + 駁回原因)、證照上傳/刪除、送審;CoachLayout 側欄入口 - 7.2
views/admin/ProvidersView.vue:badge 四態化、待審 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-verification與admin-user-management