web_ppt_7.7 / requirements.md
CatPtain's picture
Upload 8 files
f28b421 verified
# 网页PPT后端系统需求文档
## 项目概述
本项目为网页PPT前端系统配套的后端服务,主要功能包括用户认证、PPT数据管理、分享功能、历史记录管理等。系统设计为部署在Hugging Face Space上,使用Docker容器化部署。
## 技术架构
### 部署环境
- **平台**: Hugging Face Space
- **容器化**: Docker
- **运行时**: Node.js 18 Alpine
- **端口**: 7860
### 技术栈
- **后端框架**: Express.js + TypeScript
- **数据存储**:
- 临时数据库:内存存储(最大12GB)
- 永久数据库:GitHub仓库
- **图片处理**: Sharp
- **定时任务**: node-cron
- **安全**: Helmet, bcryptjs, express-rate-limit
## 功能需求
### 1. 用户认证系统
#### 1.1 内置账户
系统不支持公开注册,仅提供4个预配置账户:
| 用户名 | 密码 | 角色 |
|--------|------|------|
| PS01 | admin_cybercity2025 | admin |
| PS02 | cybercity2025 | user |
| PS03 | cybercity2025 | user |
| PS04 | cybercity2025 | user |
#### 1.2 认证功能
- JWT token认证
- 登录失败锁定机制(5次失败锁定30分钟)
- 密码加密存储(bcrypt)
- 会话管理
### 2. 数据存储架构
#### 2.1 临时数据库(内存)
- **存储介质**: Hugging Face Space内存
- **容量限制**: 最大12GB
- **数据类型**:
- 用户信息
- PPT编辑数据
- 导出的PPT页面截图
- 分享链接数据
- **自动保存**: 每10分钟自动保存修改的数据
#### 2.2 永久数据库(GitHub)
- **存储介质**: GitHub仓库
- **同步策略**: 每天03:00自动同步修改的数据
- **配置方式**: Space环境变量
- `GITHUB_TOKEN`: GitHub访问令牌
- `GITHUB_REPO`: 仓库地址(格式:owner/repo)
- **数据恢复**: Space重启时自动从GitHub同步数据
#### 2.3 数据同步规则
- **增量同步**: 仅同步修改的数据,未修改数据不同步
- **容量控制**: 同步数据量超过7GB时,仅同步最近的数据
- **按需加载**: 用户访问早期数据时,临时从GitHub拉取
### 3. PPT分享功能
#### 3.1 分享机制
- 在前端PPT页面缩略图上添加分享按钮
- 点击按钮调用前端导出图片功能
- 导出JPEG格式截图
- 保存到内存临时数据库
- 生成永久唯一公网链接
#### 3.2 链接管理
- 链接是长期有效并且唯一的
- 链接格式:`/api/sharelink/{PPT的slideID}`
- 外网可通过链接直接访问图片
- 如果ppt修改,保存后将自动更新图片并按同样的流程上传内存数据库替换旧图片,外界通过这个链接读取更新的图片
- 访问日志记录
#### 3.3 自动更新
- PPT页面修改后,用户保存数据时自动重新生成截图
- 覆盖内存中的原截图
- 公网链接保持不变
- 外网访问获得更新后的页面
### 4. 历史PPT管理
#### 4.1 管理界面
- 前端页面顶部添加历史PPT管理按钮
- 弹出历史PPT管理界面
- 支持分页显示(默认20条/页)
- 支持搜索和筛选功能
#### 4.2 数据加载策略
- 优先从内存数据库读取
- 内存中不存在需要的数据再从GitHub仓库拉取,这部分数据编辑后保存自动同步回内存数据库
- 支持按需加载早期数据
- 提供加载状态指示
#### 4.3 管理功能
- 查看PPT列表
- 打开历史PPT
- 复制PPT
- 删除PPT
- 导出PPT
### 5. API接口设计
#### 5.1 认证接口
```
POST /api/auth/login # 用户登录
GET /api/auth/verify # 验证token
POST /api/auth/logout # 用户登出
GET /api/auth/me # 获取用户信息
```
#### 5.2 PPT管理接口
```
POST /api/ppt/save # 保存PPT
PUT /api/ppt/:id # 更新PPT
GET /api/ppt/:id # 获取PPT详情
DELETE /api/ppt/:id # 删除PPT
GET /api/ppt # 获取PPT列表
POST /api/ppt/:id/copy # 复制PPT
```
#### 5.3 分享接口
```
POST /api/share/slide # 分享幻灯片
GET /api/share/view/:shareId # 查看分享截图
GET /api/share/info/:shareId # 获取分享信息
GET /api/share/my-shares # 获取我的分享
DELETE /api/share/:shareId # 删除分享
```
#### 5.4 历史管理接口
```
GET /api/history/ppts # 获取历史PPT列表
GET /api/history/ppts/:id/from-github # 从GitHub获取PPT
POST /api/history/search # 搜索历史PPT
GET /api/history/stats # 获取统计信息
```
### 6. 安全要求
#### 6.1 认证安全
- JWT token过期时间:24小时
- 密码加密:bcrypt(12轮)
- 登录失败锁定:5次失败锁定30分钟
#### 6.2 API安全
- 请求频率限制:100请求/15分钟
- CORS配置
- Helmet安全头
- 输入验证和清理
#### 6.3 数据安全
- 用户数据隔离
- 敏感信息不记录日志
- GitHub token安全存储
### 7. 性能要求
#### 7.1 响应时间
- API响应时间 < 500ms
- 图片加载时间 < 2s
- PPT列表加载 < 1s
#### 7.2 并发处理
- 支持同时100个用户在线
- 数据库操作异步处理
- 图片压缩优化
#### 7.3 内存管理
- 内存使用监控
- 自动清理过期数据
- 数据压缩存储
### 8. 监控和日志
#### 8.1 日志记录
- 用户操作日志
- 系统错误日志
- 性能监控日志
- GitHub同步日志
#### 8.2 健康检查
- 服务健康状态检查
- 数据库连接状态
- GitHub连接状态
- 内存使用情况
### 9. 部署配置
#### 9.1 环境变量
```bash
# 基础配置
PORT=5000
NODE_ENV=production
# GitHub配置
GITHUB_TOKEN=your-github-token
GITHUB_REPO=owner/repo-name
GITHUB_BRANCH=main
# 可选配置
MAX_MEMORY_GB=7
AUTO_SAVE_INTERVAL=10
SYNC_HOUR=0
```
#### 9.2 Docker配置
- 基础镜像:node:18-alpine
- 工作目录:/app
- 数据目录:/app/data
- 健康检查:GET /health
### 10. 维护和扩展
#### 10.1 数据备份
- 自动GitHub同步
- 手动备份功能
- 数据恢复机制
#### 10.2 系统维护
- 日志轮转
- 内存清理
- 性能优化
#### 10.3 功能扩展
- 支持更多用户
- 增加协作功能
- 优化存储策略
## 项目结构
```
backend/
├── src/
│ ├── config/ # 配置文件
│ ├── middleware/ # 中间件
│ ├── routes/ # 路由
│ ├── services/ # 服务层
│ ├── types/ # 类型定义
│ ├── utils/ # 工具函数
│ └── index.ts # 入口文件
├── data/ # 数据目录
├── Dockerfile # Docker配置
├── package.json # 依赖配置
├── tsconfig.json # TypeScript配置
└── requirements.md # 需求文档
```
## 开发和测试
### 开发环境
```bash
npm install
npm run dev
```
### 生产构建
```bash
npm run build
npm start
```
### 测试
```bash
npm test
```
## 总结
本后端系统为网页PPT应用提供完整的数据管理、用户认证、分享功能和历史记录管理。通过内存+GitHub的双重存储策略,确保数据的可靠性和访问性能。系统设计考虑了Hugging Face Space的特点和限制,提供了完整的解决方案。