Files
ggl/.trae/documents/梦回高句丽项目技术架构文档.md
2025-09-23 07:35:11 +00:00

5.8 KiB
Executable File
Raw Permalink Blame History

梦回高句丽视频分享平台技术架构文档

1. Architecture design

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

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

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)

-- 创建用户表
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)

-- 创建视频表
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)

-- 创建视频统计表
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);