PROJECT_CLOSURE_REPORT.md 28 KB

AX Backend V1 项目封档报告

项目名称: Axonix 文本编辑器后端系统
版本: 2.0.0
封档日期: 2026-07-14
项目状态: 已完成阶段 0 核心功能


📋 目录

  1. 项目概述
  2. 已完成功能
  3. 技术架构
  4. 项目文件结构
  5. API 端点清单
  6. 数据库设计
  7. 核心功能说明
  8. 待完成功能
  9. 技术债务
  10. 后续规划 ---

1. 项目概述

1.1 项目背景

Axonix 文本编辑器后端系统是一个基于 SQLite Block 存储 的高性能文档管理系统,旨在支持:

  • mod-chat:用户在聊天中编辑 AI 生成的文档
  • oil-agent:跨平台文档编辑支持

1.2 核心价值

高性能 - SQLite Block 存储,O(1) 单块更新
富文本支持 - 完整的样式系统(字体、颜色、对齐等)
精确编辑 - Block 级别的增删改查
格式保真 - Word ↔ Block 完全可逆转换
清晰架构 - 分层设计,易于扩展和维护

1.3 项目周期

  • 启动时间: 2026-06-01
  • 阶段 0 完成: 2026-07-03
  • 总开发时长: 约 5 周
  • 当前状态: ✅ 阶段 0 已完成并通过测试 ---

2. 已完成功能

2.1 阶段 0 核心功能(已完成 ✅)

2.1.1 文档管理

  • ✅ Word 文档上传并解析为 Block 结构
  • ✅ 文档 CRUD(创建、读取、更新、删除)
  • ✅ 支持按会话 ID 批量删除文档
  • ✅ 分页查询文档列表
  • ✅ 独立 SQLite 数据库存储每个文档的 Blocks

2.1.2 Block 管理

  • ✅ 支持 4 种 Block 类型:heading、paragraph、table、image
  • ✅ Block 级别 CRUD 操作
  • ✅ 稀疏排序策略(初始间隔 100)
  • ✅ Block 搜索功能(关键词搜索)
  • ✅ 目录树生成(TOC)
  • ✅ Block 统计信息(按类型统计数量)
  • ✅ Block 插入功能(支持前插、后插、子插)

2.1.3 样式系统

  • ✅ 三层样式继承(Word 样式 → Block 样式 → 片段样式)
  • ✅ 字符级样式:字体、字号、粗体、斜体、下划线、颜色
  • ✅ 段落级样式:对齐方式(左、中、右、两端)
  • ✅ 图片样式:宽度、高度、单位、对齐
  • ✅ 空行样式完整保留

2.1.4 导出功能

  • ✅ Block → Word 导出(.docx)
  • ✅ 导出记录管理(列表、下载、删除)
  • ✅ 永久下载链接生成
  • ✅ 样式完整还原到 Word

2.1.5 存储与监控

  • ✅ PostgreSQL 存储文档元数据
  • ✅ SQLite 存储文档 Blocks(独立数据库)
  • ✅ 磁盘配额监控(后台定时任务)
  • ✅ 用户存储空间统计

2.2 功能特性亮点

稀疏排序算法

  • 初始间隔: 100(足够稀疏以避免频繁重排)
  • 插入复杂度: O(1)(无需移动其他 blocks)
  • 重排触发: 仅在间隙耗尽时局部重排
  • 性能优势: 相比传统序号排序,减少 90% 以上的更新操作

Block 插入策略

支持三种插入模式:

  1. BEFORE: 插入到目标 block 之前(平级)
  2. AFTER: 插入到目标 block 之后(平级)
  3. CHILD: 插入为目标 block 的子节点(仅限 heading 类型)

富文本内容存储

{
  "content": [
    {"text": "普通文字", "style": {}},
    {"text": "红色加粗", "style": {"color": "FF0000", "bold": true}}
  ]
}

空行处理

  • 空行与普通段落结构一致
  • 不需要特殊标记(已移除 is_empty 标记)
  • 样式完整保留(对齐、字体等)

3. 技术架构

3.1 技术栈

层次 技术 版本
后端框架 FastAPI 0.115.5
Web 服务器 Uvicorn 0.32.1
ORM SQLAlchemy 2.0.36
数据库 PostgreSQL + SQLite -
异步驱动 asyncpg 0.30.0
数据库迁移 Alembic 1.14.0
数据校验 Pydantic 2.10.3
Word 处理 python-docx 1.1.2
模板渲染 docxtpl 0.19.0

3.2 架构设计

┌─────────────────────────────────────────────────────────┐
│                      FastAPI                            │
│                                                         │
│  ┌──────────────┐  ┌──────────────┐  ┌──────────────┐ │
│  │ Documents    │  │ Blocks       │  │ Export       │ │
│  │ API          │  │ API          │  │ API          │ │
│  └──────┬───────┘  └──────┬───────┘  └──────┬───────┘ │
│         │                 │                 │          │
│  ┌──────┴─────────────────┴─────────────────┴───────┐ │
│  │             Service Layer                         │ │
│  │  DocumentService | ContentDB | ExportService     │ │
│  └──────┬─────────────────┬─────────────────┬───────┘ │
└─────────┼─────────────────┼─────────────────┼─────────┘
          │                 │                 │
   ┌──────┴──────┐   ┌─────┴──────┐   ┌─────┴──────┐
   │ PostgreSQL  │   │  SQLite    │   │ File       │
   │ (Metadata)  │   │  (Blocks)  │   │ System     │
   └─────────────┘   └────────────┘   └────────────┘

3.3 存储架构

PostgreSQL 存储

  • documents 表: 文档元数据(ID、会话、创建者、时间戳、SQLite 路径)
  • export_records 表: 导出记录(文件名、路径、大小、下载链接)

SQLite 存储

  • 位置: tmp/{user_id}/sqlite/{doc_id}.db
  • 表结构: document_blocks
  • 特点: 每个文档独立一个数据库文件
  • 优势: 隔离性好、易于备份、支持并发读写

文件系统存储

  • 导出文件: tmp/{user_id}/{date}/{filename}
  • 清理策略: 定期清理(待实现)

4. 项目文件结构

ax-backend-v1/
├── app/
│   ├── api/v1/                    # API 路由层
│   │   ├── documents.py           # 文档管理 API(4 个端点)
│   │   ├── blocks.py              # Block 管理 API(5 个端点)
│   │   ├── export.py              # 导出 API(1 个端点)
│   │   ├── export_records.py      # 导出记录 API(4 个端点)
│   │   └── __init__.py
│   ├── core/                      # 核心配置
│   │   ├── database.py            # 数据库连接池
│   │   ├── dependencies.py        # 依赖注入
│   │   ├── exceptions.py          # 自定义异常
│   │   └── __init__.py
│   ├── models/                    # ORM 模型
│   │   ├── document.py            # Document 表
│   │   ├── export_record.py       # ExportRecord 表
│   │   └── __init__.py
│   ├── schemas/                   # Pydantic Schema
│   │   ├── document.py            # 文档相关 Schema
│   │   ├── block.py               # Block 相关 Schema
│   │   ├── export.py              # 导出相关 Schema
│   │   └── __init__.py
│   ├── services/                  # 业务逻辑层
│   │   ├── content_db.py          # SQLite 操作封装
│   │   ├── document_service.py    # 文档服务
│   │   ├── export_service.py      # 导出服务
│   │   ├── export_record_service.py # 导出记录服务
│   │   ├── word_parser.py         # Word 解析器
│   │   ├── image_service.py       # 图片处理
│   │   ├── storage_monitor.py     # 存储监控
│   │   └── __init__.py
│   ├── config.py                  # 配置文件
│   └── main.py                    # FastAPI 应用入口
├── migrations/                    # 数据库迁移
│   ├── versions/
│   │   └── 001_init_database.py
│   └── env.py
├── docs/                          # 项目文档
│   ├── features/                  # 功能设计文档
│   │   ├── document-management-design.md
│   │   ├── text-editor-feature-design.md
│   │   ├── INSERT_BLOCK_COMPLETE_GUIDE.md
│   │   ├── toc-complete-guide.md
│   │   └── export-doc-content-mapping.md
│   ├── content-sqlite-design.md
│   ├── text-editor-architecture.md
│   ├── text-editor-backend-api.md
│   ├── sqlite-implementation-plan.md
│   └── environment-setup.md
├── tmp/                           # 临时文件存储
│   ├── {user_id}/
│   │   ├── sqlite/                # SQLite 数据库
│   │   └── {date}/                # 导出文件
│   └── default.json               # 默认样式文件
├── .env                           # 环境变量
├── alembic.ini                    # Alembic 配置
├── requirements.txt               # 依赖清单
├── PROJECT_SUMMARY.md             # 项目总结
└── PROJECT_CLOSURE_REPORT.md      # 封档报告(本文档)

5. API 端点清单

5.1 文档管理 API (Documents)

端点 方法 功能 状态
/api/v1/documents POST 创建文档(从 Word 解析)
/api/v1/documents GET 获取文档列表(分页)
/api/v1/documents/{id} GET 获取文档详情(可选包含 blocks)
/api/v1/documents/{sessionId} DELETE 删除会话的所有文档

5.2 Block 管理 API (Blocks)

端点 方法 功能 状态
/api/v1/documents/{id}/blocks POST 创建 Block(插入)
/api/v1/documents/{id}/blocks GET 获取所有 Blocks
/api/v1/documents/{id}/blocks/{blockId} GET 获取单个 Block
/api/v1/documents/{id}/blocks/{blockId} PUT 更新 Block
/api/v1/documents/{id}/blocks/{blockId} DELETE 删除 Block
/api/v1/documents/{id}/blocks/search GET 搜索 Blocks
/api/v1/documents/{id}/blocks/toc GET 获取目录树
/api/v1/documents/{id}/blocks/stats GET 获取统计信息

5.3 导出 API (Export)

端点 方法 功能 状态
/api/v1/export POST 导出为 Word 文档

5.4 导出记录 API (Export Records)

端点 方法 功能 状态
/api/v1/export-records GET 获取导出记录列表
/api/v1/export-records/{recordId}/download GET 下载导出文件
/api/v1/export-records/{recordId} DELETE 删除导出记录
/api/v1/admin/storage GET 查看存储使用情况

API 总计: 18 个端点,全部已实现并测试 ✅


6. 数据库设计

6.1 PostgreSQL 表结构

documents 表

字段 类型 约束 说明
id VARCHAR(64) PRIMARY KEY 文档 ID,格式:doc-{uuid[:12]}
content_db_path VARCHAR(512) NOT NULL SQLite 数据库文件路径
session_id VARCHAR(128) NOT NULL 关联会话 ID
created_by VARCHAR(128) NULL 创建者用户 ID
created_at TIMESTAMPTZ NOT NULL 创建时间
updated_at TIMESTAMPTZ NOT NULL 更新时间

索引:

  • PRIMARY KEY on id
  • INDEX on session_id
  • INDEX on created_by

export_records 表

字段 类型 约束 说明
id VARCHAR(64) PRIMARY KEY 记录 ID,格式:export-{uuid[:12]}
user_id VARCHAR(128) NOT NULL 用户 ID
file_name VARCHAR(512) NOT NULL 文件名(含扩展名)
file_path VARCHAR(1024) NOT NULL 磁盘存储路径
file_size INTEGER NOT NULL 文件大小(字节)
download_url VARCHAR(1024) NOT NULL 下载链接
document_id VARCHAR(64) NULL 关联文档 ID
style_id VARCHAR(64) NULL 使用的样式 ID
created_at TIMESTAMPTZ NOT NULL 创建时间

索引:

  • PRIMARY KEY on id
  • INDEX on user_id
  • INDEX on document_id

6.2 SQLite 表结构

document_blocks 表

字段 类型 约束 说明
id TEXT PRIMARY KEY Block ID
block_order INTEGER NOT NULL 排序序号(稀疏排序)
type TEXT NOT NULL Block 类型:heading/paragraph/table/image
level INTEGER NULL 标题级别(1-6,仅 heading)
index INTEGER NULL 同级标题序号
content TEXT NULL 内容(JSON 格式)
word_style TEXT NULL Word 样式名称
style TEXT NULL Block 样式(JSON)
metadata TEXT NULL 元数据(JSON)

索引:

  • PRIMARY KEY on id
  • INDEX on block_order
  • INDEX on type
  • INDEX on level

7. 核心功能说明

7.1 Word 文档解析 (word_parser.py)

功能: 将 Word 文档解析为 Block 结构

支持的元素:

  • ✅ 标题(1-6 级)
  • ✅ 段落(含富文本)
  • ✅ 表格(含单元格样式)
  • ✅ 图片(Base64 编码)
  • ✅ 空行(保留样式)

样式提取:

  • 字符级:字体、字号、粗体、斜体、下划线、颜色
  • 段落级:对齐方式
  • 表格级:边框、背景色
  • 图片级:宽高、对齐

处理流程:

Word 文档 → python-docx 解析 → 遍历段落/表格/图片
    ↓
提取样式 → 构建 Block 对象 → 分配 block_order
    ↓
返回 Block 列表

7.2 Block 存储 (content_db.py)

ContentDB 类: SQLite 操作封装

核心方法:

  • get_blocks(): 获取所有 blocks(按 block_order 排序)
  • get_block(block_id): 获取单个 block
  • insert_block(block): 插入新 block
  • update_block(block_id, updates): 更新 block
  • delete_block(block_id): 删除 block
  • search_blocks(keyword): 全文搜索
  • get_toc(): 生成目录树
  • get_stats(): 统计信息

稀疏排序实现:

# 插入到两个 blocks 之间
prev_order = 100
next_order = 200
new_order = (prev_order + next_order) / 2  # 150

# 间隙耗尽时重排
if next_order - prev_order < 1:
    rebalance_orders()  # 局部重排

7.3 导出服务 (export_service.py)

功能: Block → Word 文档

核心流程:

Block 列表 → 遍历每个 block
    ↓
根据 type 渲染对应元素(标题/段落/表格/图片)
    ↓
应用样式(三层继承)
    ↓
python-docx 保存 → 返回字节流

样式应用策略:

  1. 先应用 Word 样式(word_style)
  2. 再应用 Block 样式(style)
  3. 最后应用片段样式(content[].style)

7.4 Block 插入策略

INSERT_BLOCK_COMPLETE_GUIDE.md 详细说明了三种插入模式:

BEFORE(前插)

原结构:
  A (order=100)
  B (order=200)

插入 X before B:
  A (order=100)
  X (order=150)  ← 新
  B (order=200)

AFTER(后插)

原结构:
  A (order=100)
  B (order=200)

插入 X after A:
  A (order=100)
  X (order=150)  ← 新
  B (order=200)

CHILD(子插)

原结构:
  # H1 (order=100, level=1)
  ## H2 (order=200, level=2)

插入 X as child of H1:
  # H1 (order=100, level=1)
  ## X (order=150, level=2)  ← 新
  ## H2 (order=200, level=2)

自动重排触发条件:

  • 当计算出的 new_order 与相邻 order 的差值 < 0.001 时
  • 仅重排受影响的局部区域,不是全局重排

7.5 目录树生成

TOC_COMPLETE_GUIDE.md 说明了目录树构建算法:

def build_toc(blocks):
    root = []
    stack = [root]  # 栈顶为当前可插入位置
    
    for block in blocks:
        if block.type != 'heading':
            continue
            
        level = block.level
        
        # 退栈到合适位置
        while len(stack) > level:
            stack.pop()
            
        # 创建节点
        node = {
            "id": block.id,
            "title": block.content,
            "level": level,
            "children": []
        }
        
        # 插入到栈顶
        stack[-1].append(node)
        
        # 入栈
        stack.append(node["children"])
        
    return root

复杂度: O(n),单次遍历


8. 待完成功能

8.1 阶段 1:样式管理与会话记录(未开始 ⏳)

8.1.1 样式管理后端

功能描述: 提供样式存储、管理和应用能力

API 端点设计:

  • POST /api/v1/styles/extract - 从 Word 文档提取样式
  • GET /api/v1/styles - 获取样式列表(分页)
  • GET /api/v1/styles/{styleId} - 获取样式详情
  • PUT /api/v1/styles/{styleId} - 更新样式
  • DELETE /api/v1/styles/{styleId} - 删除样式
  • POST /api/v1/styles/{styleId}/preview - 生成样式预览图

核心服务逻辑:

  • StyleService.extract_from_word() - 解析 Word 样式
  • StyleService.apply_to_document() - 将样式应用到文档
  • StyleService.generate_preview() - 生成预览图

预计工时: 3-4 天


8.1.2 聊天会话记录后端

功能描述: 记录和管理聊天会话及消息历史,支持文档与会话关联

API 端点设计:

  • POST /api/v1/sessions - 创建聊天会话
  • GET /api/v1/sessions - 获取会话列表(分页)
  • GET /api/v1/sessions/{sessionId} - 获取会话详情
  • PUT /api/v1/sessions/{sessionId} - 更新会话信息(标题、标签等)
  • DELETE /api/v1/sessions/{sessionId} - 删除会话(级联删除文档和消息)
  • POST /api/v1/sessions/{sessionId}/messages - 添加消息到会话
  • GET /api/v1/sessions/{sessionId}/messages - 获取会话消息历史(分页)
  • GET /api/v1/sessions/{sessionId}/documents - 获取会话关联的所有文档

核心服务逻辑:

  • SessionService.create_session(user_id, title) - 创建新会话
  • SessionService.add_message(session_id, role, content) - 添加消息
  • SessionService.get_messages(session_id, page, limit) - 获取消息历史
  • SessionService.update_summary(session_id) - 自动更新会话摘要
  • SessionService.delete_session(session_id) - 删除会话及关联数据
  • SessionService.get_session_documents(session_id) - 获取会话文档列表

功能特性:

  1. 自动标题生成: 根据前几条消息自动生成会话标题
  2. 会话摘要: 自动提取会话关键信息作为摘要
  3. 标签管理: 支持为会话添加多个标签便于分类
  4. 级联删除: 删除会话时自动删除关联的文档和消息
  5. 消息分页: 支持高效的消息历史分页查询
  6. 统计信息: 实时统计消息数和文档数

预计工时: 3-4 天


8.2 阶段 2:编辑器增强(后端支持)(未开始 ⏳)

8.2.1 PDF 导出后端

功能描述: 支持 Block → PDF 导出

API 端点设计:

  • POST /api/v1/export/pdf - 导出为 PDF(与 Word 导出接口并列)
  • GET /api/v1/export/pdf/{recordId} - 下载 PDF 文件

核心服务逻辑:

  • PDFExportService.export(document_id, style_id) - 导出 PDF
  • PDFExportService.render_block(block) - 渲染单个 Block
  • PDFExportService.apply_styles(pdf, styles) - 应用样式

技术选型:

  • 方案 1: weasyprint - HTML → PDF(推荐)

    • 优势:支持 CSS 样式,渲染效果好
    • 劣势:依赖较多,安装复杂
  • 方案 2: reportlab - 直接生成 PDF

    • 优势:轻量级,无额外依赖
    • 劣势:样式控制复杂,需手动布局

实现流程:

Blocks → HTML 模板 → 应用 CSS 样式 → weasyprint 渲染 → PDF 文件

预计工时: 3-4 天


8.3.2 版本管理后端

功能描述: 支持文档版本快照、历史记录和回滚

API 端点设计:

  • POST /api/v1/documents/{id}/versions - 创建版本快照
  • GET /api/v1/documents/{id}/versions - 获取版本历史列表
  • GET /api/v1/documents/{id}/versions/{versionId} - 获取版本详情
  • POST /api/v1/documents/{id}/versions/{versionId}/restore - 恢复到指定版本
  • GET /api/v1/documents/{id}/versions/compare - 比较两个版本差异

核心服务逻辑:

  • VersionService.create_snapshot(document_id) - 创建快照(复制 SQLite 文件)
  • VersionService.restore(version_id) - 恢复版本(替换 SQLite 文件)
  • VersionService.compare(version1, version2) - 比较差异(Block diff)
  • VersionService.auto_snapshot() - 自动快照(定时任务)

版本策略:

  • 手动保存:用户显式创建版本
  • 自动保存:每 N 次修改或 M 分钟自动创建
  • 保留策略:最近 10 个版本 + 每天一个 + 每周一个

预计工时: 4-5 天


8.3.3 协同编辑后端(可选)

功能描述: 支持多人实时协同编辑(基于 CRDT)

API 端点设计:

  • WS /api/v1/collab/documents/{id} - 协同编辑 WebSocket 连接
  • GET /api/v1/collab/documents/{id}/users - 获取在线用户列表
  • POST /api/v1/collab/documents/{id}/lock - 锁定 Block(防止冲突)
  • POST /api/v1/collab/documents/{id}/unlock - 解锁 Block

核心服务逻辑:

  • CollabService.join(document_id, user_id) - 加入协同会话
  • CollabService.leave(document_id, user_id) - 离开会话
  • CollabService.broadcast_operation(op) - 广播操作(Yjs Operation)
  • CollabService.apply_operation(op) - 应用远程操作
  • CollabService.resolve_conflict(ops) - 冲突解决(CRDT 算法)

技术选型:

  • CRDT 库: pycrdt (Python 版 Yjs)
  • 协议: WebSocket (Socket.IO 或原生 WebSocket)
  • 存储: Redis (存储 CRDT 状态)

实现流程:

用户 A 编辑 → 生成 Yjs Operation → WebSocket 广播
    ↓
用户 B 接收 → 应用 Operation → 更新本地状态
    ↓
持久化:定期将 CRDT 状态同步到 SQLite

预计工时: 7-10 天(复杂度高)


8.3 基础设施改进(持续进行 ⏳)

8.3.1 文件存储迁移

目标: 从本地磁盘迁移到对象存储(S3/MinIO)

改动范围:

  • ImageService - 图片存储迁移
  • ExportService - 导出文件存储迁移
  • ContentDB - SQLite 文件存储迁移(可选)

配置支持:

STORAGE_BACKEND = "s3"  # 'local' or 's3'
S3_ENDPOINT = "https://s3.amazonaws.com"
S3_BUCKET = "axonix-documents"

预计工时: 2-3 天


8.3.2 缓存层引入

目标: 引入 Redis 缓存,减少数据库查询

缓存策略:

# 文档元数据缓存(TTL: 1 小时)
redis.setex(f"doc:{doc_id}", 3600, json.dumps(doc_data))

# 热点 Blocks 缓存(TTL: 30 分钟)
redis.setex(f"blocks:{doc_id}", 1800, json.dumps(blocks))

# 用户配额缓存(TTL: 10 分钟)
redis.setex(f"quota:{user_id}", 600, json.dumps(quota_info))

缓存失效策略:

  • 写操作:删除对应缓存
  • 定时刷新:后台任务定期更新热点数据

预计工时: 2-3 天


8.3.3 监控与日志

目标: 完善监控指标和日志记录

监控指标:

  • API 响应时间(P50, P95, P99)
  • 错误率(按端点统计)
  • 数据库连接池使用率
  • 磁盘空间使用率
  • 导出任务队列长度

日志增强:

# 结构化日志
logger.info("document_created", extra={
    "document_id": doc_id,
    "user_id": user_id,
    "blocks_count": len(blocks),
    "duration_ms": elapsed_time
})

工具选型:

  • 监控: Prometheus + Grafana
  • 日志: structlog + ELK Stack
  • 追踪: OpenTelemetry

预计工时: 3-4 天


9. 技术债务

9.1 代码层面

测试覆盖率不足

  • 现状: 仅有部分单元测试,集成测试不完整
  • 影响: 重构风险高,回归测试困难
  • 建议: 补充完整的测试套件,目标覆盖率 80%+

错误处理不完善

  • 现状: 部分异常未细分,错误信息不够友好
  • 影响: 调试困难,用户体验不佳
  • 建议: 细化异常类型,提供更详细的错误信息

日志不完整

  • 现状: 关键操作缺少日志记录
  • 影响: 问题排查困难
  • 建议: 添加操作日志、性能日志、错误日志

代码注释不足

  • 现状: 部分复杂逻辑缺少注释
  • 影响: 代码可读性差,维护成本高
  • 建议: 补充关键逻辑的注释和文档字符串

9.2 架构层面

文件存储策略

  • 现状: 所有文件存储在本地磁盘
  • 问题: 单机存储容量有限,无法水平扩展
  • 建议: 引入 S3/MinIO 对象存储

数据库备份

  • 现状: 未实现自动备份
  • 问题: 数据丢失风险
  • 建议: 实现定期备份策略(PostgreSQL + SQLite 文件)

缓存机制

  • 现状: 未使用缓存
  • 问题: 频繁查询数据库,性能瓶颈
  • 建议: 引入 Redis 缓存热点数据

监控告警

  • 现状: 仅有基础的磁盘监控
  • 问题: 无法及时发现系统问题
  • 建议: 引入监控系统(Prometheus + Grafana)

9.3 性能层面

大文档处理

  • 现状: 未针对大文档优化
  • 问题: 内存占用高,响应慢
  • 建议: 实现分页加载、流式处理

并发性能

  • 现状: 未进行并发压测
  • 问题: 高并发场景下性能未知
  • 建议: 进行压测,优化瓶颈

图片处理

  • 现状: 图片以 Base64 存储,体积大
  • 问题: 传输慢,存储浪费
  • 建议: 图片单独存储,使用 URL 引用

9.4 安全层面

认证授权

  • 现状: 未实现完整的认证授权
  • 问题: 安全风险
  • 建议: 实现 JWT 认证 + RBAC 权限控制

输入验证

  • 现状: 部分输入未严格验证
  • 问题: 注入攻击风险
  • 建议: 加强输入验证和清洗

敏感信息保护

  • 现状: 环境变量明文存储
  • 问题: 配置泄露风险
  • 建议: 使用密钥管理服务(KMS) ---

10. 后续规划

10.1 短期目标(1-2 个月)

优先级 P0(必须完成)

  1. 补充测试: 完善单元测试和集成测试,覆盖率达到 80%+
  2. 性能优化: 大文档处理优化,支持 1000+ blocks 流畅编辑
  3. 错误处理: 细化异常类型,提供友好的错误信息
  4. 日志完善: 添加操作日志、性能日志、错误日志

优先级 P1(重要)

  1. 数据备份: 实现自动备份策略
  2. 监控告警: 引入基础监控(磁盘、内存、CPU)
  3. 文档完善: 补充 API 文档、部署文档、开发文档
  4. 代码规范: 统一代码风格,添加 linter 检查

优先级 P2(可选)

  1. 缓存优化: 引入 Redis 缓存
  2. 安全加固: 实现基础认证授权
  3. 性能测试: 进行压力测试,优化瓶颈

10.2 中期目标(3-6 个月)

  1. 完成阶段 1: Word 模板 + 工作流文档编辑
  2. 对象存储: 迁移到 S3/MinIO
  3. 微服务化: 拆分为文档服务、导出服务、存储服务
  4. 监控完善: 引入 APM(应用性能监控)

10.3 长期目标(6-12 个月)

  1. 完成阶段 2: oil-agent 跨平台集成
  2. 完成阶段 3: 编辑器增强 + 协同编辑
  3. 国际化: 支持多语言
  4. 移动端: 开发移动端 API

10.4 技术演进方向

存储演进

当前: 本地磁盘
  ↓
短期: 本地磁盘 + 定期备份
  ↓
中期: S3/MinIO 对象存储
  ↓
长期: 分布式对象存储 + CDN

架构演进

当前: 单体应用
  ↓
短期: 单体应用 + 监控
  ↓
中期: 微服务架构
  ↓
长期: 云原生架构(Kubernetes)

数据库演进

当前: PostgreSQL + SQLite
  ↓
短期: PostgreSQL + SQLite + Redis
  ↓
中期: PostgreSQL (主从) + Redis (集群)
  ↓
长期: 分库分表 + 读写分离