Skip to content

实现 Wiki 批量导出 API 与 pages[] 请求格式 #49

Description

@hopecommon

背景

#48 负责修复 P0 后端 API 契约与演示闭环偏差。当前修复分支已经让 POST /api/wiki/export 支持单页导出、memory_ids 筛选、write_files、workspace 子目录和 frontmatter provenance。

docs/15-api-contract-plan.md 中还描述了更完整的 batch 形状:

{
  "workspace_id": "uuid",
  "pages": [
    {
      "page_slug": "why-memorybase",
      "page_type": "synthesis",
      "title": "Why MemoryBase",
      "memory_ids": ["uuid"]
    }
  ],
  "write_files": true
}

这不是 P0 演示闭环的阻塞项,但需要单独记录,避免后续遗忘。

Related: #30 #48

目标

为 Wiki export 增加批量导出能力,使一个请求可以导出多个 Wiki page,并返回统一的 pages 结果列表。

任务清单

  • 设计并实现 POST /api/wiki/export 的 batch request schema:workspace_idpages[]write_files
  • 每个 pages[] item 支持 page_slugtitlepage_typememory_ids、可选 max_memories
  • 保留当前单页请求格式的兼容,或在文档中明确废弃策略。
  • response 返回 { workspace_id, pages: [...] },每个 page 包含 page_idpage_slugrevision_nofile_pathmemory_countsource_count
  • 批量导出时每个 page 独立 upsert wiki_page 并新增 wiki_page_revision
  • 文件输出继续使用 data/markdown_wiki/{workspace_id}/{page_slug}.md
  • frontmatter 继续包含 workspace_idpage_slugpage_typetitlegenerated_atmemory_idssource_doc_ids
  • 增加单元测试和 PostgreSQL 集成测试覆盖 batch export。
  • 同步更新 docs/15-api-contract-plan.mddocs/08-api-design.md

验收标准

  • 单页兼容请求仍能通过,或有明确迁移说明。
  • 一个 batch 请求可以导出至少 3 个 wiki pages。
  • 每个 page 都生成独立 wiki_page_revision,revision number 正确递增。
  • write_files=false 时只写数据库,不落盘 Markdown 文件。
  • write_files=true 时写入 workspace 子目录。
  • 测试覆盖指定 memory_ids 与默认按重要性选择 memory 两种路径。
  • ruff check scripts backend 通过。
  • .venv/bin/python -m pytest backend/tests -q 通过。

备注

优先级建议:P1。

这个 issue 不阻塞 #48,也不阻塞 P0 演示。#48 保持聚焦:修复当前后端 API 契约偏差和 demo 闭环失败点。

Metadata

Metadata

Assignees

No one assigned

    Labels

    area: demoCreated by issue publisherarea: wikiCreated by issue publisherlane: backendCreated by issue publisherphase: 3-wiki-demoCreated by issue publisherpriority: p1Created by issue publishertype: backendCreated by issue publisher

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions