238 lines
5.8 KiB
Markdown
Executable File
238 lines
5.8 KiB
Markdown
Executable File
# 梦回高句丽视频分享平台技术架构文档
|
||
|
||
## 1. Architecture design
|
||
|
||
```mermaid
|
||
graph TD
|
||
A[用户浏览器] --> B[Vue3 前端应用]
|
||
B --> C[Node.js + Express 后端]
|
||
C --> D[SQLite 数据库]
|
||
C --> E[文件存储系统]
|
||
B --> F[本地缓存系统]
|
||
|
||
subgraph "前端层"
|
||
B
|
||
F
|
||
end
|
||
|
||
subgraph "后端层"
|
||
C
|
||
end
|
||
|
||
subgraph "数据层"
|
||
D
|
||
E
|
||
end
|
||
```
|
||
|
||
## 2. Technology Description
|
||
- 前端: Vue3@3.3+ + TypeScript@5.0+ + Element Plus@2.4+ + Vite@4.0+
|
||
- 后端: Node.js@18+ + Express@4.18+ + SQLite@3.0+
|
||
- 其他依赖: axios (HTTP客户端), vue-router (路由), pinia (状态管理), multer (文件上传)
|
||
|
||
## 3. Route definitions
|
||
| Route | Purpose |
|
||
|-------|----------|
|
||
| / | 首页,瀑布流视频展示和搜索功能 |
|
||
| /video/:id | 视频详情页,视频播放和详细信息 |
|
||
| /user/:id | 用户详情页,用户上传视频列表 |
|
||
| /search | 搜索结果页,关键词搜索结果展示 |
|
||
| /admin/login | 后台登录页,管理员身份验证 |
|
||
| /admin/dashboard | 后台管理首页,数据统计概览 |
|
||
| /admin/videos | 后台视频管理,视频增删改查 |
|
||
| /admin/upload | 后台视频上传,文件上传和信息编辑 |
|
||
|
||
## 4. API definitions
|
||
|
||
### 4.1 Core API
|
||
|
||
视频相关接口
|
||
```
|
||
GET /api/videos
|
||
```
|
||
|
||
Request:
|
||
| Param Name | Param Type | isRequired | Description |
|
||
|------------|------------|------------|-------------|
|
||
| page | number | false | 页码,默认1 |
|
||
| limit | number | false | 每页数量,默认20 |
|
||
| search | string | false | 搜索关键词 |
|
||
| userId | string | false | 用户ID筛选 |
|
||
|
||
Response:
|
||
| Param Name | Param Type | Description |
|
||
|------------|------------|-------------|
|
||
| success | boolean | 请求状态 |
|
||
| data | object | 视频列表数据 |
|
||
| total | number | 总数量 |
|
||
|
||
```
|
||
POST /api/videos
|
||
```
|
||
|
||
Request:
|
||
| Param Name | Param Type | isRequired | Description |
|
||
|------------|------------|------------|-------------|
|
||
| title | string | true | 视频标题 |
|
||
| description | string | false | 视频描述 |
|
||
| videoFile | file | true | 视频文件 |
|
||
| coverFile | file | false | 封面图片 |
|
||
| isVisible | boolean | false | 是否可见 |
|
||
| isRecommended | boolean | false | 是否推荐 |
|
||
|
||
用户认证接口
|
||
```
|
||
POST /api/auth/login
|
||
```
|
||
|
||
Request:
|
||
| Param Name | Param Type | isRequired | Description |
|
||
|------------|------------|------------|-------------|
|
||
| username | string | true | 用户名 |
|
||
| password | string | true | 密码 |
|
||
|
||
Response:
|
||
| Param Name | Param Type | Description |
|
||
|------------|------------|-------------|
|
||
| success | boolean | 登录状态 |
|
||
| token | string | JWT令牌 |
|
||
| user | object | 用户信息 |
|
||
|
||
## 5. Server architecture diagram
|
||
|
||
```mermaid
|
||
graph TD
|
||
A[客户端请求] --> B[Express 路由层]
|
||
B --> C[中间件层]
|
||
C --> D[控制器层]
|
||
D --> E[服务层]
|
||
E --> F[数据访问层]
|
||
F --> G[(SQLite数据库)]
|
||
|
||
subgraph 服务器
|
||
B
|
||
C
|
||
D
|
||
E
|
||
F
|
||
end
|
||
|
||
subgraph 中间件
|
||
H[身份验证]
|
||
I[文件上传]
|
||
J[错误处理]
|
||
K[日志记录]
|
||
end
|
||
|
||
C --> H
|
||
C --> I
|
||
C --> J
|
||
C --> K
|
||
```
|
||
|
||
## 6. Data model
|
||
|
||
### 6.1 Data model definition
|
||
|
||
```mermaid
|
||
erDiagram
|
||
USERS ||--o{ VIDEOS : uploads
|
||
VIDEOS ||--o{ VIDEO_STATS : has
|
||
|
||
USERS {
|
||
int id PK
|
||
string username
|
||
string password_hash
|
||
string email
|
||
datetime created_at
|
||
datetime updated_at
|
||
}
|
||
|
||
VIDEOS {
|
||
int id PK
|
||
string title
|
||
text description
|
||
string video_url
|
||
string cover_url
|
||
int user_id FK
|
||
int view_count
|
||
boolean is_visible
|
||
boolean is_recommended
|
||
boolean is_hot
|
||
datetime created_at
|
||
datetime updated_at
|
||
}
|
||
|
||
VIDEO_STATS {
|
||
int id PK
|
||
int video_id FK
|
||
int view_count
|
||
datetime last_viewed
|
||
datetime created_at
|
||
}
|
||
```
|
||
|
||
### 6.2 Data Definition Language
|
||
|
||
用户表 (users)
|
||
```sql
|
||
-- 创建用户表
|
||
CREATE TABLE users (
|
||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||
username TEXT UNIQUE NOT NULL,
|
||
password_hash TEXT NOT NULL,
|
||
email TEXT,
|
||
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP
|
||
);
|
||
|
||
-- 创建索引
|
||
CREATE INDEX idx_users_username ON users(username);
|
||
|
||
-- 初始化管理员账户
|
||
INSERT INTO users (username, password_hash, email) VALUES
|
||
('admin', '$2b$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', 'admin@goguryeo.com');
|
||
```
|
||
|
||
视频表 (videos)
|
||
```sql
|
||
-- 创建视频表
|
||
CREATE TABLE videos (
|
||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||
title TEXT NOT NULL,
|
||
description TEXT,
|
||
video_url TEXT NOT NULL,
|
||
cover_url TEXT,
|
||
user_id INTEGER NOT NULL,
|
||
view_count INTEGER DEFAULT 0,
|
||
is_visible INTEGER DEFAULT 1,
|
||
is_recommended INTEGER DEFAULT 0,
|
||
is_hot INTEGER DEFAULT 0,
|
||
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
|
||
);
|
||
|
||
-- 创建索引
|
||
CREATE INDEX idx_videos_user_id ON videos(user_id);
|
||
CREATE INDEX idx_videos_created_at ON videos(created_at DESC);
|
||
CREATE INDEX idx_videos_view_count ON videos(view_count DESC);
|
||
CREATE INDEX idx_videos_title ON videos(title);
|
||
```
|
||
|
||
视频统计表 (video_stats)
|
||
```sql
|
||
-- 创建视频统计表
|
||
CREATE TABLE video_stats (
|
||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||
video_id INTEGER NOT NULL,
|
||
view_count INTEGER DEFAULT 0,
|
||
last_viewed DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||
FOREIGN KEY (video_id) REFERENCES videos(id) ON DELETE CASCADE
|
||
);
|
||
|
||
-- 创建索引
|
||
CREATE INDEX idx_video_stats_video_id ON video_stats(video_id);
|
||
CREATE INDEX idx_video_stats_last_viewed ON video_stats(last_viewed DESC);
|
||
``` |