# 本週課程管理模式

## 範圍
- 後台行事曆編輯、發佈流程
- 前端 /courses/week 顯示規則

## 核心資料
- class_schedules: 每週模板課程
- class_schedule_exceptions: 異動/加開/取消/休館/停課
- class_sessions: 週課程實體 (由模板 + 例外生成)
- class_schedule_week_publications: 週發佈狀態

## 後台管理流程
1. 行事曆顯示當週課程 (class_sessions)
2. 任何編輯行為會標記當週 dirty
   - 新增/異動/停課/取消/休館
   - 拖曳或縮放
3. 「確認發佈(n)」按鈕狀態
   - 無課程: 灰階不可點
   - 有課程且未發佈或 dirty_count > 0: 可點
   - 已發佈且無變更: 灰階不可點
4. 發佈後
   - is_published = true
   - publish_count += 1
   - dirty_count = 0

## 前端顯示規則 (/courses/week)
- 只顯示已發佈週 (class_schedule_week_publications.is_published = true)
- 未發佈週顯示提示: "本週課表尚未發佈"
- 停課顯示「（停課）」標示
- 休館顯示在無課程區塊的「休館原因」

## 例外與細節
- 拖曳選 1 (異動) 與 2 (不異動) 都不應產生重複 session
- 休館行事曆顯示為佔位區塊 (淺灰)
- 休館/停課會影響前端顯示

## 發佈狀態判斷
- can_publish = has_sessions && (!is_published || dirty_count > 0)
- 新週複製後: is_published=false, publish_count=0, dirty_count>0

## 後台按鈕
- 「確認發佈(n)」: 發佈當週課表到前端
- 「複製到下週」: 複製當週課表到下週 (新週未發佈)
