Files
CFDivePlatform/openspec/changes/archive/2026-05-12-booking-system/proposal.md
T
a620906209 975b56ca54 feat:實作預約系統 — 時段管理、預約生命週期與前端整合
後端:
- 新增 course_schedules / bookings migration(含索引)
- BookingStatus / ScheduleStatus PHP BackedEnum
- CourseSchedule / Booking Model(七狀態機 VALID_TRANSITIONS)
- ScheduleController、ProviderBookingController、MemberBookingController
- 雙層名額驗證(API 層快速失敗 + DB lockForUpdate 防超賣)
- 24h 取消截止、pending 不佔位設計
- ExpirePendingBookings(每小時)/ CompleteFinishedBookings(每日)Scheduler
- Docker cron 配置、CACHE_STORE 改為 file 修正 502

前端:
- 課程詳情頁加入時段選擇與預約流程
- 我的預約頁(展開式卡片、狀態說明、連結課程詳情)
- Coach 時段管理(上午/下午時間選擇器、新課程引導)
- Coach 預約管理(依課程分組、待確認徽章)
- Navbar 新增「我的預約」與「時段/預約管理」入口
- 密碼格式提示與即時比對

OpenSpec:
- booking-system change 歸檔至 archive/2026-05-12-booking-system
- 新增 specs/course-scheduling 與 specs/booking-lifecycle 主規格

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

43 lines
2.1 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
CFDivePlatform 目前只有課程瀏覽,Member 無法預約課程,Provider 無法管理開課時段,平台缺少核心商業閉環。預約系統是金流整合與平台商業化的前置條件,必須優先實作。
## What Changes
- 新增 `course_schedules` 資料表:Provider 建立開課時段(日期、時間、人數上限)
- 新增 `bookings` 資料表:記錄 Member 預約紀錄,含價格快照
- 新增 Member API:查詢可用時段、送出預約、取消預約
- 新增 Provider API:管理開課時段 CRUD、接受/拒絕/取消預約
- 新增 Laravel Schedulerpending 超 48 小時自動 expired;課程日期過後自動 completed
- 新增前端頁面:Member 課程詳情頁加入時段選擇與預約流程;Provider Dashboard 加入時段管理與預約管理
## Capabilities
### New Capabilities
- `course-scheduling`:Provider 建立與管理開課時段,含日期、時間、人數上限、狀態(open/full/cancelled
- `booking-lifecycle`:Member 送出預約、取消預約;Provider 確認/拒絕/取消預約;系統自動過期與完成;七狀態狀態機(pending / confirmed / completed / rejected / expired / member_cancelled / provider_cancelled
### Modified Capabilities
(無既有 spec 受影響)
## Impact
**後端**
- 新增 Migration`course_schedules``bookings`
- 新增 Model`CourseSchedule``Booking`
- 新增 Controller`ScheduleController`Provider)、`BookingController`Member/Provider
- 新增 Laravel Scheduler`ExpirePendingBookings``CompleteFinishedBookings`
- 更新 `api.php`:新增 `/member/bookings``/member/schedules``/provider/schedules``/provider/bookings` 路由群組
**前端**
- 更新 `CourseDetail.vue`(或新建):加入時段列表與預約按鈕
- 新增 `src/pages/member/MyBookings.vue`:我的預約列表
- 新增 Coach Dashboard 子頁面:`ScheduleManager.vue``BookingManager.vue`
- 新增 `src/api/bookingApi.js`:封裝預約相關 API 呼叫
**資料庫**
- 兩張新資料表,無現有資料表結構變更
- `diving_offers.price` 作為預約時的價格快照來源