# Day 9 - CRUD 入門:後端工程師的日常
## 劇情背景
你正盯著螢幕上前任工程師留下的程式碼,看著 routes、controllers、entities 這些資料夾發呆...
海克絲走過來:「在研究前任的 Code 嗎?」
你嚇一跳:「是的,但...看不太懂...」
海克絲笑著拉過一張椅子:「來,我陪你一起看。不過在看這坨義大利麵之前,我想先問你一個問題——你知道什麼是 CRUD 嗎?」

---
## 學習目標
- 理解 CRUD 是什麼(新增、讀取、更新、刪除)
- 知道 CRUD 和 Day 7 學的 SQL 有什麼關係
- 了解後端程式碼放在哪裡(routes、controllers)
- 理解為什麼有些功能需要驗證身份
---
## 核心概念
### CRUD 是什麼?
CRUD 是四個基本資料操作的縮寫,90% 的後端程式碼都是在做這些事:
| 字母 | 功能 | 白話文 | 對應 SQL |
|------|------|--------|----------|
| C | Create | 新增資料 | INSERT |
| R | Read | 讀取資料 | SELECT |
| U | Update | 更新資料 | UPDATE |
| D | Delete | 刪除資料 | DELETE |
**生活化的例子:**
- 新增文章、查看文章、編輯文章、刪除文章
- 新增會員、查詢會員、修改個人資料、刪除帳號
- 教練新增課程、查看課程列表、修改課程、刪除課程
### Day 7 SQL vs Day 9 後端 CRUD
| Day 7 | Day 9 |
|-------|-------|
| 用 DBeaver 手動下 SQL 指令 | 用後端程式自動執行 |
| 開發時用來除錯、查資料 | 正式環境讓程式自動處理 |
| 管理工具的方式 | 程式碼的方式 |
**重點:** 兩種方式做的事情是一樣的(CRUD),只是一個手動、一個自動。
### 後端程式碼在哪裡?
```
backend/
├── routes/ → 定義「有哪些 API 網址可以用」(像目錄)
├── controllers/ → 處理「實際的功能邏輯」(像工人)
```
### 身份驗證的差別
今天簡報會用兩個例子來講解:
| 功能 | 需要的驗證 |
|------|-----------|
| Skill 技能管理 | 需要登入 |
| 教練新增課程 | 需要登入 + 教練身份 |
---
## 測驗題目預覽 (共 10 題)
### CRUD 基本觀念 (4 題)
1. CRUD 中的「C」代表什麼功能?
2. 「查看會員列表」這個功能,屬於 CRUD 的哪一個?
3. 會員想要「修改自己的個人資料」,這是 CRUD 的哪一個功能?
4. 教練想要「刪除一堂已取消的課程」,這是 CRUD 的哪一個功能?
### 功能面 (2 題)
5. 「教練新增一堂新課程」這個功能,後端需要做什麼?
6. 為什麼「教練新增課程」這個功能需要先驗證身份?
### 後端結構 (2 題)
7. 後端的「routes」資料夾主要負責什麼?
8. 後端的「controllers」資料夾主要負責什麼?
### 身份驗證 (1 題)
9. 「Skill 技能管理」和「教練新增課程」這兩個功能,在身份驗證上有什麼差別?
### 串連前後章節 (1 題)
10. Day 7 學的 SQL 和今天學的後端 CRUD,有什麼關係?
---
## 遊戲連結
請進入遊戲完成本日關卡:
👉 **[點此進入遊戲](https://hexschool.github.io/backend-camp-game/)**
## 回報格式(確認打卡細節)
1. 完成遊戲中的測驗並截圖完成畫面
2. 到體驗營 Discord 的[每日活動頻道](https://discord.com/channels/801807326054055996/1446368763581562880),找到當天任務的討論串
3. 在討論串留言貼上截圖,打卡儀表板會自動記錄你的成績
4. 分享一下此關卡有哪些知識點讓你印象深刻,甚至有透過 AI 服務延伸學習

---
## 海克絲的叮嚀
> 「CRUD 是後端工程師每天都在做的事。記住兩個重點檔案位置:routes 定義 API 網址,controllers 處理功能邏輯。前任留下的義大利麵 Code,不用一次全看完,先從 CRUD 的角度去理解就好。」
---
## 重點整理
### 今天學到的概念
1. **CRUD** = Create(新增)、Read(讀取)、Update(更新)、Delete(刪除)
2. **routes** = 定義有哪些 API 網址可以用,像目錄
3. **controllers** = 處理實際的功能邏輯,像工人
4. **身份驗證** = 有些功能只需要登入,有些還需要特定身份(如教練)
### Day 7 與 Day 9 的關係
- **Day 7 SQL**:用 DBeaver 手動操作資料庫
- **Day 9 CRUD**:用後端程式自動執行同樣的事
- 兩種方式做的事情一樣,只是一個手動、一個自動