# Google Drive API 設定指南

本指南說明如何設定 Google Drive API，讓系統能夠自動從 Google Drive 下載、匯入並刪除當日業績 Excel 檔案。

## 功能說明

系統會：
1. **每 30 分鐘**自動檢查 Google Drive 指定資料夾
2. **自動下載** Excel 檔案到本地
3. **自動匯入**資料到資料庫
4. **自動刪除** Google Drive 上的原始檔案
5. **追蹤進度**並提供網頁介面查看匯入狀態

---

## 步驟 1：建立 Google Cloud 專案

### 1.1 前往 Google Cloud Console

開啟 [Google Cloud Console](https://console.cloud.google.com/)

### 1.2 建立新專案

1. 點擊上方的專案選擇器
2. 點擊「新增專案」
3. 輸入專案名稱（例如：`momo-auto-import`）
4. 點擊「建立」

---

## 步驟 2：啟用 Google Drive API

### 2.1 啟用 API

1. 在 Google Cloud Console 中，前往「API 和服務」→「程式庫」
2. 搜尋「Google Drive API」
3. 點擊「Google Drive API」
4. 點擊「啟用」

---

## 步驟 3：建立 OAuth 2.0 憑證

### 3.1 建立 OAuth 同意畫面

1. 前往「API 和服務」→「OAuth 同意畫面」
2. 選擇「外部」（如果只有自己使用，選擇「內部」需要 Google Workspace）
3. 點擊「建立」
4. 填寫必要資訊：
   - **應用程式名稱**：`Momo Pro System`
   - **使用者支援電子郵件**：您的 Gmail 地址
   - **開發人員聯絡資訊**：您的 Gmail 地址
5. 點擊「儲存並繼續」
6. **範圍（Scopes）**：點擊「新增或移除範圍」
   - 搜尋並勾選：`https://www.googleapis.com/auth/drive`（完整 Drive 存取權限）
   - 點擊「更新」
7. 點擊「儲存並繼續」
8. **測試使用者**：新增您的 Gmail 地址
9. 點擊「儲存並繼續」

### 3.2 建立 OAuth 2.0 用戶端 ID

1. 前往「API 和服務」→「憑證」
2. 點擊「建立憑證」→「OAuth 用戶端 ID」
3. 應用程式類型選擇：**桌面應用程式**
4. 名稱輸入：`Momo Desktop Client`
5. 點擊「建立」
6. 會顯示「用戶端 ID」和「用戶端密鑰」
7. 點擊「下載 JSON」

### 3.3 放置憑證檔案

1. 將下載的 JSON 檔案重新命名為：`google_credentials.json`
2. 放置到專案的 `config/` 目錄中：
   ```
   /Users/ogt/momo_pro_system/config/google_credentials.json
   ```

---

## 步驟 4：首次認證

### 4.1 執行認證流程

首次使用時需要進行認證：

```bash
cd /Users/ogt/momo_pro_system

# 執行認證腳本
python3 -c "
from services.google_drive_service import drive_service
drive_service.authenticate()
"
```

### 4.2 完成授權

1. 瀏覽器會自動開啟 Google 授權頁面
2. 選擇您的 Google 帳號
3. 系統會顯示：「Google 尚未驗證此應用程式」
   - 點擊「繼續」（因為這是您自己的應用程式）
4. 點擊「允許」授予 Google Drive 存取權限
5. 看到「授權流程已完成」即表示成功

### 4.3 Token 檔案

授權完成後，系統會自動建立 `config/google_token.pickle`，此檔案包含您的存取權杖，下次使用時不需重新授權。

**安全提示**：此檔案包含敏感資訊，請勿分享或上傳到公開儲存庫。

---

## 步驟 5：設定 Google Drive 資料夾

### 5.1 在 Google Drive 建立資料夾結構

建議的資料夾結構：

```
我的雲端硬碟/
└── 業績報表/
    └── 當日業績/
        └── 即時業績_當日_20260113.xlsx
```

### 5.2 在系統中配置路徑

1. 開啟瀏覽器，前往：http://localhost/auto_import
2. 在「匯入配置」區域設定：
   - **Google Drive 資料夾路徑**：`業績報表/當日業績`
   - **檔案名稱模式**：`即時業績_當日`（選填，用於過濾檔案）
3. 點擊「儲存配置」
4. 點擊「測試連接」確認連接正常
5. 點擊「列出檔案」查看該資料夾中的檔案

---

## 步驟 6：測試自動匯入

### 6.1 上傳測試檔案

1. 將當日業績 Excel 檔案上傳到 Google Drive 的指定資料夾
2. 檔案名稱範例：`即時業績_當日_20260113.xlsx`

### 6.2 手動測試

1. 在自動匯入頁面點擊「立即匯入」
2. 觀察「匯入任務歷史」區域，應該會看到新的任務記錄
3. 任務狀態會從「等待中」→「下載中」→「匯入中」→「已完成」
4. 完成後，Google Drive 上的檔案會被自動刪除

### 6.3 驗證匯入結果

```bash
# 查詢匯入的資料
python3 -c "
from services.import_service import import_service
jobs = import_service.get_recent_jobs(limit=1)
for job in jobs:
    print(f'任務 ID: {job[\"id\"]}')
    print(f'狀態: {job[\"status\"]}')
    print(f'檔案: {job[\"drive_file_name\"]}')
    print(f'成功: {job[\"success_rows\"]} 筆')
"
```

---

## 步驟 7：自動排程

系統已自動設定每 30 分鐘檢查一次 Google Drive：

- 排程任務會在背景自動執行
- 無需手動觸發
- 可在「匯入任務歷史」查看執行記錄
- 每次檢查到新檔案就會自動匯入

---

## 常見問題

### Q1: 認證失敗，顯示「找不到認證檔案」

**A:** 確認 `config/google_credentials.json` 檔案存在且路徑正確。

### Q2: 授權時顯示「應用程式未經驗證」

**A:** 這是正常的，因為這是您自己的應用程式。點擊「繼續」即可。

### Q3: 找不到 Google Drive 資料夾

**A:** 確認：
1. 資料夾路徑正確（區分大小寫）
2. 資料夾確實存在於「我的雲端硬碟」中
3. 使用的 Google 帳號有該資料夾的存取權限

### Q4: 檔案沒有被自動刪除

**A:** 確認：
1. 匯入任務狀態為「已完成」（不是「失敗」）
2. 檢查日誌檔案：`logs/system.log`

### Q5: 如何重新授權？

**A:** 刪除 `config/google_token.pickle` 檔案，然後重新執行步驟 4。

### Q6: 可以使用 Service Account 嗎？

**A:** 可以，但需要修改程式碼。Service Account 適合在伺服器上無人值守運行，但需要手動分享 Drive 資料夾給 Service Account 的電子郵件地址。

---

## 安全建議

1. **不要分享憑證檔案**
   - `google_credentials.json`
   - `google_token.pickle`
   - 這些檔案已加入 `.gitignore`

2. **定期檢查授權**
   - 前往 [Google 帳戶安全性](https://myaccount.google.com/permissions)
   - 檢查「Momo Pro System」的授權狀態

3. **限制 API 存取範圍**
   - 目前使用完整 Drive 存取權限
   - 如需更嚴格控制，可修改為 `drive.file` scope（僅存取應用程式建立的檔案）

4. **備份重要資料**
   - 在刪除 Google Drive 檔案前，系統會先匯入到本地資料庫
   - 建議定期備份資料庫

---

## 進階設定

### 修改檢查頻率

編輯 `app.py`，找到：

```python
schedule.every(30).minutes.do(run_auto_import_task)
```

修改為您想要的頻率：
- 每 15 分鐘：`schedule.every(15).minutes.do(...)`
- 每小時：`schedule.every(1).hours.do(...)`
- 每天早上 8 點：`schedule.every().day.at("08:00").do(...)`

### 保留 Google Drive 檔案

如果不想自動刪除 Google Drive 檔案，修改 `services/import_service.py` 中的 `auto_import_from_drive` 方法，註解掉刪除部分：

```python
# if drive_service.delete_file(file_id):
#     logger.info(f"已刪除 Google Drive 檔案: {file_name}")
```

---

## 監控和日誌

### 查看即時日誌

```bash
tail -f logs/system.log | grep AutoImport
```

### 查看匯入統計

前往網頁介面：http://localhost/auto_import

### 查詢排程統計

```bash
cat data/scheduler_stats.json | grep auto_import_task
```

---

## 故障排除

### 檢查服務狀態

```python
python3 -c "
from services.google_drive_service import drive_service
from services.import_service import import_service

# 測試 Google Drive 連接
if drive_service.authenticate():
    print('✅ Google Drive 連接正常')
else:
    print('❌ Google Drive 連接失敗')

# 查詢最近的任務
jobs = import_service.get_recent_jobs(limit=5)
print(f'\\n📋 最近 {len(jobs)} 個任務:')
for job in jobs:
    print(f'  - 任務 {job[\"id\"]}: {job[\"status\"]} ({job[\"progress_percent\"]}%)')
"
```

---

## 參考資料

- [Google Drive API 文檔](https://developers.google.com/drive/api/guides/about-sdk)
- [Python Quickstart](https://developers.google.com/drive/api/quickstart/python)
- [OAuth 2.0 說明](https://developers.google.com/identity/protocols/oauth2)

---

**完成！** 🎉

您的 Google Drive 自動匯入功能已設定完成，系統會每 30 分鐘自動檢查並匯入新的業績檔案。
