0455c1577e
- 引入 Redis(predis)快取層:Admin Stats(5分鐘)、課程列表(3分鐘,tag-based 失效)、評價分布(10分鐘) - ReviewController::publicList 改為 paginate + eager load votes,消除 N+1 - AdminReviewController::index 加入分頁(預設 20,最大 100) - 新增 notifications / diving_offers 效能索引 migration - 新增 docker-compose.override.yml 本機開發 port mapping 機制(不進 git) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
1.4 KiB
1.4 KiB
MODIFIED Requirements
Requirement: 評價公開顯示(匿名)
任何人(含未登入)SHALL 能查看課程評價列表,評價人統一顯示為「匿名潛水者」。Provider 在 Coach Portal 亦可查看自己課程的評價(只讀)。評價列表 SHALL 支援分頁,預設每頁 20 筆,最大 50 筆。
Scenario: 取得評價列表(含 summary,含分頁)
- WHEN 任何人送出
GET /api/diving-offers/{id}/reviews?sort=helpful|rating|newest&page=1&per_page=20 - THEN 系統回傳
summary(平均星等、總數、1–5 星分布)與分頁後的reviews列表;reviewer_name一律為「匿名潛水者」;已登入 Member 額外回傳is_mine;未登入has_voted固定為false、is_mine欄位省略;回傳包含分頁 meta(current_page、last_page、per_page、total)
Scenario: per_page 超出上限時截斷
- WHEN 請求帶有
per_page=200 - THEN 系統以
per_page=50處理,不回傳錯誤
Scenario: 三種排序
- WHEN
sort=helpful(預設) - THEN 依
helpful_count DESC, created_at DESC排序 - WHEN
sort=rating - THEN 依
rating DESC, created_at DESC排序 - WHEN
sort=newest - THEN 依
created_at DESC排序
Scenario: votes 透過 eager loading 查詢
- WHEN 已登入 Member 送出評價列表請求
- THEN
has_voted欄位透過 eager loadedvotescollection 判斷,不額外發 SQL 查詢