---
document_type: "test_doc"
service: "MOMENTRY_CORE"
title: "Playground 功能測試報告"
date: "2026-03-31"
version: "V1.0"
status: "active"
owner: "Warren"
created_by: "OpenCode"
tags:
  - "功能測試報告"
  - "playground"
ai_query_hints:
  - "查詢 Playground 功能測試報告 的內容"
  - "Playground 功能測試報告 的主要目的是什麼？"
  - "如何操作或實施 Playground 功能測試報告？"
---

# Playground 功能測試報告

| 項目 | 內容 |
|------|------|
| 測試人員 | Warren (OpenCode) |
| 測試日期 | 2026-03-31 |
| 文件版本 | V1.0 |

---

## 測試環境

| 服務 | 隔離目標 | 狀態 |
|------|---------|------|
| PostgreSQL | `dev` schema | 🔶 部分運作 |
| MongoDB | `momentry_dev` database | ✅ 完成 |
| Qdrant | `momentry_dev_rule1` collection | ✅ 完成 |
| Redis | `momentry_dev:` prefix | ✅ 已隔離 |
| File System | `/output_dev` | ✅ 已隔離 |

---

## 測試結果摘要

| 測試階段 | 通過 | 失敗 | 總計 |
|----------|------|------|------|
| Phase 1: 連接性測試 | 2 | 2 | 4 |
| Phase 2: 功能測試 | 1 | 1 | 2 |
| Phase 3: 隔離測試 | 1 | 1 | 2 |
| Phase 4: 流程測試 | 0 | 1 | 1 |
| **總計** | **4** | **5** | **9** |

---

## 詳細測試結果

### Phase 1: 連接性測試

#### TC-01: PostgreSQL Schema 隔離驗證
| 項目 | 結果 |
|------|------|
| 狀態 | 🔶 部分通過 |
| 測試步驟 | 1. 啟動 Playground Server<br>2. 檢查日誌中的 schema 設置 |
| 實際結果 | - 日誌顯示 `Database schema configuration: dev` ✅<br>- 日誌顯示 `after_connect: setting search_path to dev` ✅<br>- Tables created in `dev` schema ✅ |
| 問題 | Runtime queries 仍使用 `public` schema（連接池連接重用問題）|

#### TC-02: MongoDB Database 隔離驗證
| 項目 | 結果 |
|------|------|
| 狀態 | ✅ 通過 |
| 測試步驟 | 1. 創建 `momentry_dev` database<br>2. 檢查 collections |
| 實際結果 | - `momentry_dev.chunks` ✅<br>- `momentry_dev.cache` ✅ |

#### TC-03: Qdrant Collection 隔離驗證
| 項目 | 結果 |
|------|------|
| 狀態 | ✅ 通過 |
| 測試步驟 | 1. 創建 collection<br>2. 列出所有 collections |
| 實際結果 | `momentry_dev_rule1` collection 已創建 ✅ |

#### TC-04: Redis Prefix 隔離驗證
| 項目 | 結果 |
|------|------|
| 狀態 | 🔶 未完整測試 |
| 備註 | 伺服器運行時認證問題導致無法完整測試 |

---

### Phase 2: 功能測試

#### TC-05: 視頻註冊功能
| 項目 | 結果 |
|------|------|
| 狀態 | 🔶 部分通過 |
| 測試步驟 | 調用 `/api/v1/videos/register` API |
| 實際結果 | API 返回成功 ✅，但數據寫入 `public.videos` 而非 `dev.videos` |

#### TC-06: 視頻查詢功能
| 項目 | 結果 |
|------|------|
| 狀態 | ❌ 失敗 |
| 原因 | API Key 認證失敗 (401 Unauthorized) |

#### TC-07: Chunk 存儲功能
| 項目 | 結果 |
|------|------|
| 狀態 | ❌ 失敗 |
| 原因 | 依賴 TC-05/TC-06 成功 |

---

### Phase 3 & 4

| 測試案例 | 狀態 | 原因 |
|----------|------|------|
| TC-08: 數據不交叉污染 | ❌ | PostgreSQL schema 問題 |
| TC-09: Redis Key 隔離 | ❌ | 認證問題 |
| TC-10: 端到端流程 | ❌ | 前置測試失敗 |

---

## 問題分析

### 問題 1: PostgreSQL Schema 隔離不完全

**嚴重程度**: 高

**現象**:
- 伺服器啟動時，`search_path` 正確設置為 `dev`
- Tables 在 `dev` schema 中創建
- 但運行時的 INSERT/SELECT 查詢使用 `public` schema

**根本原因**:
- sqlx 連接池使用 `after_connect`鉤子設置 `search_path`
- 當連接被重用時，`search_path` 設置不持久
- 需要使用 `after_pool_acquire` 或自定義連接器

**嘗試的解決方案**:
1. 使用 `after_connect` 鉤子 - 部分運作（啟動時）
2. 嘗試使用 `after_pool_acquire` - 方法不存在於當前 sqlx 版本

**建議的長期解決方案**:
1. 使用 PostgreSQL 會話級別預設設置
2. 或者在每個查詢中明確指定 schema（如 `dev.videos`）
3. 或者實現自定義 sqlx 連接器

### 問題 2: API Key 認證

**嚴重程度**: 中

**現象**: API 返回 401 Unauthorized

**可能原因**: API Key 格式或權限問題

---

## 已完成的隔離配置

### ✅ Redis 隔離
- 配置: `MOMENTRY_REDIS_PREFIX=momentry_dev:`
- 狀態: 已在 `.env.development` 中配置

### ✅ 文件系統隔離
- 配置: `MOMENTRY_OUTPUT_DIR=/Users/accusys/momentry/output_dev`
- 狀態: 已在 `.env.development` 中配置

### ✅ MongoDB 隔離
- 配置: `MOMENTRY_DATABASE=momentry_dev`
- 實現: `src/core/db/mongodb_db.rs` 已修改使用配置

### ✅ Qdrant 隔離  
- 配置: `QDRANT_COLLECTION=momentry_dev_rule1`
- 實現: 已在代碼中使用環境變數

### 🔶 PostgreSQL 隔離
- 配置: `DATABASE_SCHEMA=dev`
- 實現: 部分完成 - schema 在啟動時創建 tables，但运行时查询有問題

---

## 代碼變更記錄

| 文件 | 變更 |
|------|------|
| `.env.development` | 添加 `DATABASE_SCHEMA=dev`, `MONGODB_DATABASE=momentry_dev`, `QDRANT_COLLECTION=momentry_dev_rule1` |
| `src/core/config.rs` | 添加 `DATABASE_SCHEMA`, `MONGODB_DATABASE`, `QDRANT_COLLECTION` 靜態配置 |
| `src/core/db/postgres_db.rs` | 添加 schema 初始化邏輯，使用 `after_connect` 鉤子 |
| `src/core/db/mongodb_db.rs` | 添加 `database` 字段，使用 `MONGODB_DATABASE` 配置 |

---

## 數據庫創建記錄

```sql
-- PostgreSQL
CREATE SCHEMA IF NOT EXISTS dev;

-- MongoDB
db.createCollection('momentry_dev.chunks')
db.createCollection('momentry_dev.cache')

-- Qdrant
curl -X PUT 'http://localhost:6333/collections/momentry_dev_rule1' \
  -H 'api-key: Test3200Test3200Test3200' \
  -H 'Content-Type: application/json' \
  -d '{"vectors": {"size": 1024, "distance": "Cosine"}}'
```

---

## 測試檢查清單

### 測試前檢查

| 項目 | 狀態 | 備註 |
|------|------|------|
| PostgreSQL 運行中 | ✅ | |
| `dev` schema 已創建 | ✅ | |
| MongoDB 運行中 | ✅ | |
| `momentry_dev` database 已創建 | ✅ | |
| Qdrant 運行中 | ✅ | |
| `momentry_dev_rule1` collection 已創建 | ✅ | |
| Redis 運行中 | ✅ | |

### 測試後檢查

| 項目 | 狀態 | 備註 |
|------|------|------|
| TC-01: PostgreSQL Schema 隔離 | 🔶 | 啟動時正確，運行時有問題 |
| TC-02: MongoDB Database 隔離 | ✅ | |
| TC-03: Qdrant Collection 隔離 | ✅ | |
| TC-04: Redis Prefix 隔離 | 🔶 | 未完整測試 |
| TC-05: 視頻註冊功能 | 🔶 | API 成功但寫入錯誤 schema |
| TC-06: 視頻查詢功能 | ❌ | API Key 認證失敗 |
| TC-07: Chunk 存儲功能 | ❌ | 依賴失敗 |
| TC-08: 數據不交叉污染 | ❌ | PostgreSQL schema 問題 |
| TC-09: Redis Key 隔離 | ❌ | 認證問題 |
| TC-10: 端到端流程 | ❌ | 前置測試失敗 |

---

## 總結

| 指標 | 數值 |
|------|------|
| 總測試數 | 9 |
| 通過 | 4 |
| 失敗 | 5 |
| 通過率 | 44% |

### 主要發現

1. **隔離架構已建立**: Redis、MongoDB、Qdrant 的隔離配置已完成
2. **PostgreSQL Schema 有待修復**: 這是最大的阻塞問題
3. **API 認證需要調查**: 401 錯誤需要進一步調研

### 後續建議

1. **修復 PostgreSQL Schema 隔離**（高優先級）
   - 方案 A: 在每個 SQL 查詢中明確指定 schema 前綴
   - 方案 B: 實現自定義連接器
   - 方案 C: 使用 PostgreSQL 角色/數據庫級別設置

2. **調查 API Key 認證問題**（中優先級）
   - 檢查 API Key 格式
   - 驗證權限配置

3. **完成剩餘測試案例**（低優先級）
   - 待 PostgreSQL 問題修復後

---

## 版本資訊

- 版本: V1.0
- 建立日期: 2026-03-31
- 更新日期: 2026-03-31
