建立檔案

This commit is contained in:
2025-08-05 08:22:44 +08:00
commit 042d03aff7
122 changed files with 34763 additions and 0 deletions

670
SOFTWARE_SPECIFICATION.md Normal file
View File

@@ -0,0 +1,670 @@
# AI展示平台軟體規格書
## 1. 專案概述
### 1.1 專案名稱
AI展示平台 (AI Showcase Platform)
### 1.2 專案目標
建立一個企業內部的AI應用展示、競賽管理和評審系統促進AI技術的創新與應用。
### 1.3 專案範圍
- 用戶認證與權限管理
- AI應用展示與管理
- 競賽系統與評審流程
- 團隊協作與提案管理
- 數據分析與報表生成
- 管理員後台系統
- AI智能助手系統
## 2. 系統架構
### 2.1 技術棧
#### 前端技術
- **框架**: Next.js 15.2.4 (App Router)
- **語言**: TypeScript 5
- **UI庫**:
- Radix UI (無障礙組件)
- shadcn/ui (設計系統)
- Tailwind CSS (樣式框架)
- **狀態管理**: React Context API
- **表單處理**: React Hook Form + Zod
- **圖表**: Recharts
- **包管理器**: pnpm
#### 開發工具
- **代碼品質**: ESLint + TypeScript
- **樣式處理**: PostCSS + Tailwind CSS
- **圖標**: Lucide React
- **版本控制**: Git
### 2.2 目錄結構
```
ai-showcase-platform/
├── app/ # Next.js App Router
│ ├── admin/ # 管理員頁面
│ ├── competition/ # 競賽頁面
│ ├── judge-scoring/ # 評審評分頁面
│ ├── register/ # 註冊頁面
│ └── globals.css # 全域樣式
├── components/ # React 組件
│ ├── admin/ # 管理員專用組件
│ ├── auth/ # 認證相關組件
│ ├── competition/ # 競賽相關組件
│ ├── reviews/ # 評論系統組件
│ ├── chat-bot.tsx # AI智能助手組件
│ └── ui/ # 通用UI組件
├── contexts/ # React Context
│ ├── auth-context.tsx # 認證狀態管理
│ └── competition-context.tsx # 競賽狀態管理
├── hooks/ # 自定義 Hooks
├── lib/ # 工具函數
├── types/ # TypeScript 類型定義
└── public/ # 靜態資源
```
## 3. 功能需求
### 3.1 用戶管理系統
#### 3.1.1 用戶角色
- **一般用戶 (user)**: 瀏覽應用、參與投票
- **開發者 (developer)**: 提交AI應用、參與競賽
- **管理員 (admin)**: 系統管理、數據分析
#### 3.1.2 用戶功能
- 註冊/登入/登出
- 個人資料管理
- 收藏應用
- 按讚功能 (每日限制)
- 瀏覽記錄
- 權限控制
### 3.2 競賽系統
#### 3.2.1 競賽類型
- **個人賽 (individual)**: 個人開發者競賽
- **團隊賽 (team)**: 團隊協作競賽
- **提案賽 (proposal)**: 創新提案競賽
- **混合賽 (mixed)**: 綜合性競賽
#### 3.2.2 競賽狀態
- **upcoming**: 即將開始
- **active**: 進行中
- **judging**: 評審中
- **completed**: 已完成
#### 3.2.3 評審系統
- 多維度評分 (創新性、技術性、實用性、展示效果、影響力)
- 評審管理
- 分數統計與排名
- 評審意見記錄
### 3.3 獎項系統
#### 3.3.1 獎項類型
- **金獎/銀獎/銅獎**: 排名獎項
- **最佳創新獎**: 創新性獎項
- **最佳技術獎**: 技術實現獎項
- **人氣獎**: 受歡迎程度獎項
- **自定義獎項**: 可配置的獎項
#### 3.3.2 獎項分類
- **innovation**: 創新類
- **technical**: 技術類
- **practical**: 實用類
- **popular**: 人氣類
- **teamwork**: 團隊協作類
- **solution**: 解決方案類
- **creativity**: 創意類
### 3.4 管理員系統
#### 3.4.1 用戶管理
- 用戶列表查看
- 用戶權限管理
- 用戶資料編輯
- 用戶統計分析
#### 3.4.2 競賽管理
- 競賽創建與編輯
- 競賽狀態管理
- 參賽者管理
- 評審分配
#### 3.4.3 評審管理
- 評審帳號管理
- 評審分配
- 評分進度追蹤
- 評審意見管理
#### 3.4.4 數據分析
- 競賽統計
- 用戶活躍度分析
- 應用熱度分析
- 評分趨勢分析
### 3.5 AI智能助手系統
#### 3.5.1 核心功能
- **即時對話**: 與AI助手進行自然語言對話
- **智能回答**: 基於DeepSeek API的智能回應
- **快速問題**: 提供相關問題的快速選擇
- **上下文記憶**: 保持對話的連續性
#### 3.5.2 對話能力
- **前台功能指導**: 註冊、提交作品、投票、收藏等
- **後台管理協助**: 競賽創建、評審管理、評分系統等
- **系統使用指南**: 提供具體的操作步驟
- **問題分類處理**: 根據問題類型提供相關建議
#### 3.5.3 用戶體驗
- **浮動按鈕**: 固定在右下角的聊天入口
- **模態對話框**: 全屏遮罩的聊天界面
- **即時反饋**: 輸入狀態和載入動畫
- **響應式設計**: 適配不同螢幕尺寸
#### 3.5.4 技術特性
- **API整合**: 與DeepSeek Chat API無縫整合
- **內容清理**: 自動清理Markdown格式和過長文字
- **錯誤處理**: 網路錯誤和API錯誤的優雅處理
- **性能優化**: 限制token數量以獲得更簡潔的回答
## 4. 數據模型
### 4.1 用戶模型
```typescript
interface User {
id: string
name: string
email: string
avatar?: string
department: string
role: "user" | "developer" | "admin"
joinDate: string
favoriteApps: string[]
recentApps: string[]
totalLikes: number
totalViews: number
}
```
### 4.2 競賽模型
```typescript
interface Competition {
id: string
name: string
year: number
month: number
startDate: string
endDate: string
status: "upcoming" | "active" | "judging" | "completed"
description: string
type: "individual" | "team" | "mixed" | "proposal"
judges: string[]
participatingApps: string[]
participatingTeams: string[]
participatingProposals: string[]
rules: CompetitionRule[]
awardTypes: CompetitionAwardType[]
evaluationFocus: string
maxTeamSize?: number
}
```
### 4.3 評審模型
```typescript
interface Judge {
id: string
name: string
title: string
department: string
expertise: string[]
avatar?: string
}
interface JudgeScore {
judgeId: string
appId: string
scores: {
innovation: number
technical: number
usability: number
presentation: number
impact: number
}
comments: string
submittedAt: string
}
```
### 4.4 團隊模型
```typescript
interface TeamMember {
id: string
name: string
department: string
role: string
}
interface Team {
id: string
name: string
members: TeamMember[]
leader: string
department: string
contactEmail: string
apps: string[]
totalLikes: number
}
```
### 4.5 獎項模型
```typescript
interface Award {
id: string
competitionId: string
appId?: string
teamId?: string
proposalId?: string
appName?: string
teamName?: string
proposalTitle?: string
creator: string
awardType: "gold" | "silver" | "bronze" | "popular" | "innovation" | "technical" | "custom"
awardName: string
score: number
year: number
month: number
icon: string
customAwardTypeId?: string
competitionType: "individual" | "team" | "proposal"
rank: number
category: "innovation" | "technical" | "practical" | "popular" | "teamwork" | "solution" | "creativity"
}
```
### 4.6 AI助手模型
```typescript
interface Message {
id: string
text: string
sender: "user" | "bot"
timestamp: Date
quickQuestions?: string[]
}
interface ChatSession {
id: string
userId: string
messages: Message[]
createdAt: Date
updatedAt: Date
}
interface AIAssistantConfig {
apiKey: string
apiUrl: string
model: string
maxTokens: number
temperature: number
systemPrompt: string
}
```
## 5. API 設計
### 5.1 認證 API
```
POST /api/auth/login # 用戶登入
POST /api/auth/register # 用戶註冊
POST /api/auth/logout # 用戶登出
GET /api/auth/profile # 獲取用戶資料
PUT /api/auth/profile # 更新用戶資料
```
### 5.2 競賽 API
```
GET /api/competitions # 獲取競賽列表
POST /api/competitions # 創建競賽
GET /api/competitions/:id # 獲取競賽詳情
PUT /api/competitions/:id # 更新競賽
DELETE /api/competitions/:id # 刪除競賽
GET /api/competitions/:id/scores # 獲取競賽評分
POST /api/competitions/:id/scores # 提交評分
```
### 5.3 用戶 API
```
GET /api/users # 獲取用戶列表
GET /api/users/:id # 獲取用戶詳情
PUT /api/users/:id # 更新用戶資料
DELETE /api/users/:id # 刪除用戶
GET /api/users/:id/apps # 獲取用戶應用
GET /api/users/:id/teams # 獲取用戶團隊
```
### 5.4 評審 API
```
GET /api/judges # 獲取評審列表
POST /api/judges # 創建評審帳號
GET /api/judges/:id # 獲取評審詳情
PUT /api/judges/:id # 更新評審資料
DELETE /api/judges/:id # 刪除評審
GET /api/judges/:id/scores # 獲取評審評分
POST /api/judges/:id/scores # 提交評審評分
```
### 5.5 團隊 API
```
GET /api/teams # 獲取團隊列表
POST /api/teams # 創建團隊
GET /api/teams/:id # 獲取團隊詳情
PUT /api/teams/:id # 更新團隊資料
DELETE /api/teams/:id # 刪除團隊
GET /api/teams/:id/members # 獲取團隊成員
POST /api/teams/:id/members # 添加團隊成員
```
### 5.6 獎項 API
```
GET /api/awards # 獲取獎項列表
POST /api/awards # 創建獎項
GET /api/awards/:id # 獲取獎項詳情
PUT /api/awards/:id # 更新獎項
DELETE /api/awards/:id # 刪除獎項
GET /api/awards/by-year/:year # 按年份獲取獎項
GET /api/awards/by-type/:type # 按類型獲取獎項
```
### 5.7 AI助手 API
```
POST /api/chat/send # 發送聊天訊息
GET /api/chat/history # 獲取聊天歷史
DELETE /api/chat/history # 清除聊天歷史
POST /api/chat/feedback # 提交聊天反饋
GET /api/chat/quick-questions # 獲取快速問題建議
```
## 6. 數據庫設計
### 6.1 用戶表 (users)
```sql
CREATE TABLE users (
id VARCHAR(36) PRIMARY KEY,
name VARCHAR(100) NOT NULL,
email VARCHAR(255) UNIQUE NOT NULL,
password_hash VARCHAR(255) NOT NULL,
avatar VARCHAR(500),
department VARCHAR(100) NOT NULL,
role ENUM('user', 'developer', 'admin') DEFAULT 'user',
join_date DATE NOT NULL,
total_likes INT DEFAULT 0,
total_views INT DEFAULT 0,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
```
### 6.2 競賽表 (competitions)
```sql
CREATE TABLE competitions (
id VARCHAR(36) PRIMARY KEY,
name VARCHAR(200) NOT NULL,
year INT NOT NULL,
month INT NOT NULL,
start_date DATE NOT NULL,
end_date DATE NOT NULL,
status ENUM('upcoming', 'active', 'judging', 'completed') DEFAULT 'upcoming',
description TEXT,
type ENUM('individual', 'team', 'mixed', 'proposal') NOT NULL,
evaluation_focus TEXT,
max_team_size INT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
```
### 6.3 評審表 (judges)
```sql
CREATE TABLE judges (
id VARCHAR(36) PRIMARY KEY,
name VARCHAR(100) NOT NULL,
title VARCHAR(100) NOT NULL,
department VARCHAR(100) NOT NULL,
expertise JSON,
avatar VARCHAR(500),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
```
### 6.4 評分表 (judge_scores)
```sql
CREATE TABLE judge_scores (
id VARCHAR(36) PRIMARY KEY,
judge_id VARCHAR(36) NOT NULL,
app_id VARCHAR(36),
proposal_id VARCHAR(36),
scores JSON NOT NULL,
comments TEXT,
submitted_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (judge_id) REFERENCES judges(id),
FOREIGN KEY (app_id) REFERENCES apps(id),
FOREIGN KEY (proposal_id) REFERENCES proposals(id)
);
```
### 6.5 團隊表 (teams)
```sql
CREATE TABLE teams (
id VARCHAR(36) PRIMARY KEY,
name VARCHAR(200) NOT NULL,
leader_id VARCHAR(36) NOT NULL,
department VARCHAR(100) NOT NULL,
contact_email VARCHAR(255) NOT NULL,
total_likes INT DEFAULT 0,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (leader_id) REFERENCES users(id)
);
```
### 6.6 團隊成員表 (team_members)
```sql
CREATE TABLE team_members (
id VARCHAR(36) PRIMARY KEY,
team_id VARCHAR(36) NOT NULL,
user_id VARCHAR(36) NOT NULL,
role VARCHAR(50) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (team_id) REFERENCES teams(id),
FOREIGN KEY (user_id) REFERENCES users(id)
);
```
### 6.7 應用表 (apps)
```sql
CREATE TABLE apps (
id VARCHAR(36) PRIMARY KEY,
name VARCHAR(200) NOT NULL,
description TEXT,
creator_id VARCHAR(36) NOT NULL,
team_id VARCHAR(36),
likes_count INT DEFAULT 0,
views_count INT DEFAULT 0,
rating DECIMAL(3,2) DEFAULT 0,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (creator_id) REFERENCES users(id),
FOREIGN KEY (team_id) REFERENCES teams(id)
);
```
### 6.8 獎項表 (awards)
```sql
CREATE TABLE awards (
id VARCHAR(36) PRIMARY KEY,
competition_id VARCHAR(36) NOT NULL,
app_id VARCHAR(36),
team_id VARCHAR(36),
proposal_id VARCHAR(36),
award_type ENUM('gold', 'silver', 'bronze', 'popular', 'innovation', 'technical', 'custom') NOT NULL,
award_name VARCHAR(200) NOT NULL,
score DECIMAL(5,2) NOT NULL,
year INT NOT NULL,
month INT NOT NULL,
icon VARCHAR(50),
custom_award_type_id VARCHAR(36),
competition_type ENUM('individual', 'team', 'proposal') NOT NULL,
rank INT DEFAULT 0,
category ENUM('innovation', 'technical', 'practical', 'popular', 'teamwork', 'solution', 'creativity') NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (competition_id) REFERENCES competitions(id),
FOREIGN KEY (app_id) REFERENCES apps(id),
FOREIGN KEY (team_id) REFERENCES teams(id)
);
```
### 6.9 聊天會話表 (chat_sessions)
```sql
CREATE TABLE chat_sessions (
id VARCHAR(36) PRIMARY KEY,
user_id VARCHAR(36) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (user_id) REFERENCES users(id)
);
```
### 6.10 聊天訊息表 (chat_messages)
```sql
CREATE TABLE chat_messages (
id VARCHAR(36) PRIMARY KEY,
session_id VARCHAR(36) NOT NULL,
text TEXT NOT NULL,
sender ENUM('user', 'bot') NOT NULL,
quick_questions JSON,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (session_id) REFERENCES chat_sessions(id)
);
```
### 6.11 AI助手配置表 (ai_assistant_configs)
```sql
CREATE TABLE ai_assistant_configs (
id VARCHAR(36) PRIMARY KEY,
api_key VARCHAR(255) NOT NULL,
api_url VARCHAR(500) NOT NULL,
model VARCHAR(100) NOT NULL,
max_tokens INT DEFAULT 200,
temperature DECIMAL(3,2) DEFAULT 0.7,
system_prompt TEXT NOT NULL,
is_active BOOLEAN DEFAULT TRUE,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
```
## 7. 非功能性需求
### 7.1 性能需求
- 頁面載入時間 < 3秒
- 支持同時1000+用戶在線
- 數據庫查詢響應時間 < 500ms
- 圖片優化和CDN加速
- AI助手回應時間 < 5秒
- 聊天訊息實時更新
### 7.2 安全需求
- 用戶密碼加密存儲
- JWT Token認證
- CSRF防護
- XSS防護
- SQL注入防護
- 權限驗證
- AI API密鑰安全存儲
- 聊天數據隱私保護
### 7.3 可用性需求
- 系統可用性 > 99.5%
- 響應式設計,支持多設備
- 無障礙設計 (WCAG 2.1)
- 多語言支持準備
### 7.4 可維護性需求
- 模組化架構
- 完整的API文檔
- 代碼註釋和文檔
- 單元測試覆蓋率 > 80%
- 錯誤日誌和監控
## 8. 部署架構
### 8.1 開發環境
- **前端**: Next.js 開發服務器
- **後端**: Node.js/Express 或 Python/FastAPI
- **數據庫**: PostgreSQL 或 MySQL
- **緩存**: Redis
- **文件存儲**: 本地存儲或雲存儲
### 8.2 生產環境
- **前端**: Vercel 或 AWS S3 + CloudFront
- **後端**: AWS EC2 或 Docker 容器
- **數據庫**: AWS RDS 或自建數據庫
- **緩存**: AWS ElastiCache (Redis)
- **文件存儲**: AWS S3
- **CDN**: CloudFront 或 Cloudflare
## 9. 開發計劃
### 9.1 第一階段 (4週)
- [x] 前端架構搭建
- [x] 基礎組件開發
- [x] 認證系統實現
- [x] 競賽管理基礎功能
### 9.2 第二階段 (4週)
- [ ] 後端API開發
- [ ] 數據庫設計與實現
- [ ] 評審系統完善
- [ ] 獎項系統實現
### 9.3 第三階段 (3週)
- [ ] 數據分析功能
- [ ] 管理員後台完善
- [ ] 性能優化
- [ ] 安全加固
### 9.4 第四階段 (2週)
- [ ] 測試與調試
- [ ] 文檔完善
- [ ] 部署上線
- [ ] 用戶培訓
## 10. 風險評估
### 10.1 技術風險
- **數據庫性能**: 大量數據查詢可能影響性能
- **並發處理**: 高並發場景下的數據一致性
- **安全性**: 用戶數據保護和系統安全
### 10.2 項目風險
- **時間風險**: 開發進度可能延遲
- **需求變更**: 功能需求可能調整
- **資源風險**: 開發資源不足
### 10.3 緩解措施
- 採用成熟的技術棧
- 實施敏捷開發方法
- 建立完善的測試體系
- 制定詳細的項目計劃
- 定期進行代碼審查
---
**文檔版本**: v1.0
**最後更新**: 2025年07月
**負責人**: 敏捷小組 - 佩庭
**審核人**: 強茂集團