Files
CFDivePlatform/openspec/changes/archive/2026-05-17-notification-system/proposal.md
T
a620906209 03f8caf3e9 feat:實作通知系統 — 站內通知、Email 通知、Polling 機制
後端
- 新增 6 個 Notification class(預約建立/確認/拒絕/取消/完成、收到評價),database + mail 雙 channel
- 新增 NotificationController(list / unread-count / markRead / markAllRead / destroy)
- 整合通知觸發至 MemberBookingController、ProviderBookingController、CompleteFinishedBookings、ReviewController
- 新增 notifications / jobs / failed_jobs migration
- Docker Compose 加入 queue-worker、mailpit service
- DivingOffer 補上 provider() 關聯

前端
- 新增 notificationStore(Polling 30s/60s 自適應 + Page Visibility API)
- 新增 NotificationBell(未讀 Badge)、NotificationDrawer(側邊通知中心)
- main.js:auth store init 前置於 router.use(),修正 beforeEach guard 時序問題
- notificationAxios:依路徑動態選擇 member/coach token
- NotificationDrawer:改用 new URL().pathname 提取 action_url 路徑

OpenSpec
- 歸檔 notification-system change
- 同步 notification-core / notification-email / notification-triggers specs 至主規格
- 更新 booking-lifecycle / review-lifecycle spec(補充通知觸發 requirement)

Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
2026-05-17 22:26:14 +08:00

37 lines
2.0 KiB
Markdown
Raw 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
預約確認、取消、評價等關鍵事件目前完全沒有通知機制,使用者只能主動回頁面查看,造成重要訊息遺漏。實作通知系統可閉合「事件發生→使用者知情」這段空白,提升平台使用黏著度。
## What Changes
- 新增**站內通知(In-App Notification**:所有角色(Member / Provider / Admin)可在導覽列看到未讀數量,點開通知中心查看全部通知
- 新增**Email 通知**:重要事件以信件寄送,使用 Laravel Queued Mailable + Markdown 模板
- 新增**通知觸發點**整合至現有業務邏輯(預約、評價、教練審核):
- 預約建立 → 通知 Provider
- 預約確認/拒絕 → 通知 Member
- 預約取消(任一方) → 通知對方
- 預約完成 → 通知 Member(可評價)
- Member 送出評價 → 通知 Provider
- Admin 審核/拒絕教練申請 → 通知 Provider
## Capabilities
### New Capabilities
- `notification-core`: 通知資料模型、API(取得列表、標記已讀、刪除)、Vue 站內通知元件(Bell Icon + 通知中心 Drawer
- `notification-email`: Laravel Mail 設定、Markdown 模板、Queue 投遞機制
- `notification-triggers`: 在 BookingService / ReviewService / Admin 審核流程中插入通知觸發邏輯
### Modified Capabilities
- `booking-lifecycle`: 預約七狀態機各轉換點需加上通知觸發
- `review-lifecycle`: 評價建立後需觸發 Provider 通知
## Impact
- **新增資料表**`notifications`Laravel 內建 `database` notification channel schema
- **新增 API**`GET /api/notifications``PATCH /api/notifications/{id}/read``PATCH /api/notifications/read-all``DELETE /api/notifications/{id}`
- **後端依賴**Laravel Notification + Queuedatabase driver,可升級為 Redis)、Laravel MailSMTP/Mailpit 本地測試)
- **前端依賴**Pinia store for notifications、Polling 或 SSE 取得即時未讀數
- **影響範圍**BookingService、ReviewService、Admin 教練審核 controller