# MOMO Pro System - API 文件

> 最後更新：2026-01-29

---

## 📌 概述

### Base URL
- **生產環境**: `https://mo.wooo.work`
- **開發環境**: `http://localhost:5000`

### 認證方式
- **Session Cookie**: 透過 `/login` 取得
- **Bot API Token**: Header `Authorization: Bearer <token>`

### 回應格式
```json
{
    "success": true,
    "data": { ... },
    "message": "操作成功"
}
```

### 錯誤回應
```json
{
    "success": false,
    "error": "錯誤訊息",
    "code": "ERROR_CODE"
}
```

---

## 🔐 認證 API

### 登入
```http
POST /login
Content-Type: application/x-www-form-urlencoded
```

| 參數 | 類型 | 必填 | 說明 |
|------|------|------|------|
| username | string | ✓ | 帳號 |
| password | string | ✓ | 密碼 |

**回應**: 302 Redirect 或 401

### 登出
```http
GET /logout
```

### 修改密碼
```http
POST /api/user/change_password
Content-Type: application/json
```

```json
{
    "current_password": "舊密碼",
    "new_password": "新密碼"
}
```

---

## 📊 商品看板 API

### 取得商品列表
```http
GET /api/products
```

| 參數 | 類型 | 說明 |
|------|------|------|
| page | int | 頁碼 (default: 1) |
| per_page | int | 每頁筆數 (default: 50) |
| category | string | 分類篩選 |
| filter | string | 狀態篩選 (all/increase/decrease/delisted) |
| q | string | 搜尋關鍵字 |
| sort_by | string | 排序欄位 |
| order | string | 排序方向 (asc/desc) |

**回應**:
```json
{
    "items": [...],
    "total": 5576,
    "page": 1,
    "per_page": 50,
    "total_pages": 112
}
```

### 取得商品價格歷史
```http
GET /api/history/{product_id}
```

**回應**:
```json
[
    {"t": "2026-01-29 14:00", "p": 3280},
    {"t": "2026-01-28 14:00", "p": 3180}
]
```

### 手動執行爬蟲
```http
POST /api/run_task
```

### 發送價格通知
```http
POST /api/trigger_momo_notification
```

---

## 📈 業績分析 API

### 取得每日業績
```http
GET /api/daily_sales
```

| 參數 | 類型 | 說明 |
|------|------|------|
| date | string | 日期 (YYYY-MM-DD) |
| pm | string | PM 篩選 |
| brand | string | 品牌篩選 |

### 取得月份總表
```http
GET /api/monthly_summary
```

| 參數 | 類型 | 說明 |
|------|------|------|
| year | int | 年份 |
| month | int | 月份 |

### 取得銷售趨勢
```http
GET /api/sales/trend
```

| 參數 | 類型 | 說明 |
|------|------|------|
| start_date | string | 開始日期 |
| end_date | string | 結束日期 |
| dimension | string | 維度 (brand/pm/category) |

---

## 📦 廠商缺貨 API

### 匯入缺貨資料
```http
POST /api/vendor/stockout/import
Content-Type: multipart/form-data
```

| 參數 | 類型 | 說明 |
|------|------|------|
| file | file | Excel 檔案 |

### 取得缺貨列表
```http
GET /api/vendor/stockout
```

| 參數 | 類型 | 說明 |
|------|------|------|
| batch_id | string | 批次篩選 |
| vendor_code | string | 廠商篩選 |
| status | string | 狀態篩選 |

### 發送通知郵件
```http
POST /api/vendor/stockout/send
Content-Type: application/json
```

```json
{
    "stockout_ids": [1, 2, 3]
}
```

### 廠商清單 CRUD

```http
GET /api/vendor/list                      # 取得廠商列表
POST /api/vendor/list                     # 新增廠商
PUT /api/vendor/list/{vendor_id}          # 更新廠商
DELETE /api/vendor/list/{vendor_id}       # 刪除廠商
```

### 廠商郵件 CRUD

```http
GET /api/vendor/{vendor_id}/emails        # 取得郵件列表
POST /api/vendor/{vendor_id}/emails       # 新增郵件
DELETE /api/vendor/email/{email_id}       # 刪除郵件
```

---

## 🤖 AI API

### 生成文案
```http
POST /api/ai/generate
Content-Type: application/json
```

```json
{
    "product_name": "商品名稱",
    "style": "吸睛",
    "keywords": ["保濕", "抗老"],
    "provider": "ollama"
}
```

**回應**:
```json
{
    "content": "生成的文案內容",
    "model": "llama3:70b",
    "duration": 5.2,
    "input_tokens": 120,
    "output_tokens": 85
}
```

### 取得熱門推薦
```http
GET /api/ai/trending
```

| 參數 | 類型 | 說明 |
|------|------|------|
| source | string | 來源 (mybest/cosme/youtube) |
| category | string | 分類 |

### 網路搜尋 (Gemini)
```http
POST /api/ai/search
Content-Type: application/json
```

```json
{
    "query": "搜尋關鍵字"
}
```

### AI 歷史記錄

```http
GET /api/ai/history                       # 取得歷史列表
GET /api/ai/history/{id}                  # 取得單筆記錄
PUT /api/ai/history/{id}/favorite         # 切換收藏
DELETE /api/ai/history/{id}               # 刪除記錄
```

### AI 使用統計
```http
GET /api/ai/usage/stats
```

| 參數 | 類型 | 說明 |
|------|------|------|
| start_date | string | 開始日期 |
| end_date | string | 結束日期 |

---

## 👤 用戶管理 API

### 取得用戶列表 (Admin)
```http
GET /api/users
```

### 新增用戶 (Admin)
```http
POST /api/users
Content-Type: application/json
```

```json
{
    "username": "帳號",
    "email": "郵箱",
    "password": "密碼",
    "role": "user",
    "display_name": "顯示名稱"
}
```

### 更新用戶 (Admin)
```http
PUT /api/users/{user_id}
```

### 刪除用戶 (Admin)
```http
DELETE /api/users/{user_id}
```

### 重設密碼 (Admin)
```http
POST /api/users/{user_id}/reset_password
```

### 取得登入歷史
```http
GET /api/users/login_history
```

---

## ⚙️ 系統 API

### 取得系統狀態
```http
GET /api/system/status
```

**回應**:
```json
{
    "cpu_percent": 25.5,
    "memory_percent": 68.2,
    "disk_percent": 45.0,
    "uptime": "5 days"
}
```

### 取得爬蟲狀態
```http
GET /api/system/crawler/status
```

### 系統清理
```http
POST /api/system/cleanup
```

### K8s Pod 重啟
```http
POST /api/system/k8s/restart
Content-Type: application/json
```

```json
{
    "deployment": "momo-app"
}
```

### 健康檢查
```http
GET /health
```

**回應**: `200 OK`

### Prometheus 指標
```http
GET /metrics
```

---

## 📥 匯入 API

### 列出 Google Drive 檔案
```http
GET /api/import/drive/files
```

### 匯入 Drive 檔案
```http
POST /api/import/drive/import
Content-Type: application/json
```

```json
{
    "file_id": "Google Drive 檔案 ID",
    "job_type": "daily_sales"
}
```

### 取得匯入進度
```http
GET /api/import/jobs/{job_id}
```

---

## 📤 匯出 API

### 匯出商品報表
```http
GET /api/export/excel/all
GET /api/export/excel/changes
GET /api/export/excel/delisted
```

### 匯出業績報表
```http
GET /api/export/daily_sales
```

| 參數 | 類型 | 說明 |
|------|------|------|
| date | string | 日期 |
| format | string | 格式 (excel/csv) |

---

## 🔔 通知 API

### 發送 Telegram 通知
```http
POST /api/notification/telegram
Content-Type: application/json
```

```json
{
    "message": "通知內容"
}
```

### 渲染通知模板 (供 n8n 呼叫)
```http
POST /api/notification/render
Content-Type: application/json
```

```json
{
    "code": "disk_warning",
    "variables": {
        "usage_percent": 85
    }
}
```

### 取得通知模板
```http
GET /api/notification/templates
GET /api/notification/templates/{code}
PUT /api/notification/templates/{code}
```

---

## 🤖 Bot API

### Telegram Webhook
```http
POST /api/bot/telegram/webhook
```

### Bot 指令處理
```http
POST /api/bot/command
Content-Type: application/json
```

```json
{
    "command": "/sales",
    "args": ["today"]
}
```

---

## 📝 錯誤代碼

| 代碼 | HTTP | 說明 |
|------|------|------|
| AUTH_REQUIRED | 401 | 需要登入 |
| AUTH_FAILED | 401 | 登入失敗 |
| PERMISSION_DENIED | 403 | 權限不足 |
| NOT_FOUND | 404 | 資源不存在 |
| VALIDATION_ERROR | 400 | 參數驗證錯誤 |
| RATE_LIMITED | 429 | 請求過於頻繁 |
| SERVER_ERROR | 500 | 伺服器錯誤 |
