Files
a620906209 81a9f84b26 feat:實作評價系統 — 匿名評價、有幫助投票、手動完成預約
後端:
- 新增 reviews / review_edits / review_votes migration(含索引)
- Review / ReviewEdit / ReviewVote Model
- ReviewController:評價 CRUD、資格驗證(completed booking)、rating 即時重算
- toggleHelpful:Member 限定、GREATEST 原子防負、DB transaction 同步
- AdminReviewController:全量列表、刪除(含重算)
- AdminBookingController:全量列表、手動標記 completed
- ProviderBookingController 新增 complete 方法(教練手動完成預約)
- DevelopmentSeeder:快速重建測試資料(admin/coach/member + offers + bookings)
- EnsureAdmin middleware 正式納入 bootstrap/app.php
- Nginx server_name 加入 cfdive.local

前端:
- 課程詳情頁加入評價區塊(星等分布、排序切換、撰寫/修改/刪除、有幫助 Toggle)
- Coach Portal 新增「課程評價」頁(只讀,依課程分組)
- Coach 預約管理加入「完成」按鈕
- Admin 新增「預約管理」頁(標記完成)、「評價管理」頁(刪除)
- Admin / Coach Navbar 新增對應連結

OpenSpec:
- review-system change 歸檔至 archive/2026-05-12-review-system
- 新增 specs/review-lifecycle 與 specs/review-voting 主規格
- review-voting spec 補充 Member 限定與 GREATEST 原子更新說明

Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
2026-05-12 02:46:54 +08:00

43 lines
2.0 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
## Why
預約系統完成後,平台已能撮合教練與學員完成課程。但 `diving_offers.rating``reviews` 兩個欄位目前是假資料,平台缺乏真實評價機制,Member 瀏覽課程時無法參考其他人的體驗。評價系統是提升平台信任度與課程品質的關鍵閉環。
## What Changes
- 新增 `reviews` 資料表:Member 對完成的課程留下星等(1–5)與文字評論
- 新增 `review_edits` 資料表:記錄最近一次修改前的舊版本(一評價一筆上限)
- 新增 `review_votes` 資料表:Member 對評價投「有幫助」票(可取消,防重複)
- `diving_offers.rating` / `.reviews` 在新增、修改、刪除評價時即時重算
- 評價公開顯示,評價人統一匿名為「匿名潛水者」
- 三種排序切換:最多幫助(預設)/ 最高分 / 最新
- Member 可修改與刪除自己的評價;Admin 可刪除任何評價
## Capabilities
### New Capabilities
- `review-lifecycle`:評價的建立(資格驗證、一課一評)、修改(is_edited 標記 + 舊版備份)、刪除(Member 本人或 Admin)、rating 即時重算
- `review-voting`:Member 登入後對評價投「有幫助」票,可取消;依 `helpful_count` 排序為預設
### Modified Capabilities
(無)
## Impact
**後端**
- 新增 Migration`reviews``review_edits``review_votes`
- 新增 Model`Review``ReviewEdit``ReviewVote`
- 新增 Controller`ReviewController`Member)、`AdminReviewController`Admin
- 更新 `routes/api.php`:公開列表、Member 評價 CRUD + 投票、Admin 刪除
- 更新 `DivingOffer` Model:加入 `hasMany Review` 關聯
**前端**
- 新增課程詳情頁評價區塊:星等分布、評價列表、排序切換、「有幫助」按鈕
- 新增 Member 評價表單:完課後可寫評、已評可修改
- 新增 `frontend/src/api/reviewApi.js`
- Admin Panel 新增評價管理頁(刪除問題評論)
**資料庫**
- 三張新資料表,`diving_offers` 現有 `rating` / `reviews` 欄位語意從假資料改為真實計算值