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 环境变量

# 基础配置
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      # 需求文档

开发和测试

开发环境

npm install
npm run dev

生产构建

npm run build
npm start

测试

npm test

总结

本后端系统为网页PPT应用提供完整的数据管理、用户认证、分享功能和历史记录管理。通过内存+GitHub的双重存储策略,确保数据的可靠性和访问性能。系统设计考虑了Hugging Face Space的特点和限制,提供了完整的解决方案。