# 梦回高句丽视频分享平台技术架构文档 ## 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); ```