# @go/docDB `docDB` 是一个独立的高级文档存储引擎,基于 `@go/tableDB` 构建,提供版本管理、流式上传及生命周期钩子。 ## 📦 安装 ```bash go get apigo.cc/go/docDB ``` ## 🛠 核心功能 1. **权限隔离**:完全继承 `tableDB` 的用户隔离体系。 2. **版本管控**:通过 `SetDoc` 强制提升文档版本,`SetMeta` 仅更新属性而不影响版本。 3. **流式上传**:支持 `io.Reader` 接口,低内存占用处理大文件落盘。 4. **事件驱动**:提供 `OnCreatedDoc`, `OnUpdatedDoc`, `OnRemoved` 钩子,方便集成搜索索引、异步处理等。 5. **结构化目录**:自动提取 Markdown 文档的目录树 (ToC)。 ## 🚀 快速开始 ### 初始化 ```go import ( "apigo.cc/go/docDB" "apigo.cc/go/tableDB" ) // 创建 DocDB 实例 db := tableDB.GetDB("sqlite://docs.db", logger) docStore := docDB.New(db, "./storage") // 授权并获取 App app := docStore.Auth("user_123") ``` ### 存储文档 ```go doc := &docDB.Document{ Path: "/projects/readme.md", Title: "Getting Started", TextContent: "# Hello World\n...", BinaryContent: fileReader, // 可选,流式上传 } // 保存文档 (版本提升) err := app.SetDoc(doc) ``` ### 更新元数据 ```go // 仅更新标签,不提升版本 err := app.SetMeta(docID, map[string]any{ "Tags": "tutorial,go", }) ``` ### 监听事件 ```go docStore.OnCreatedDoc(func(doc *docDB.Document) { fmt.Println("New doc created:", doc.ID) // 可以在这里触发异步摘要生成或向量化 }) ``` ## 📝 注意事项 - **数据对齐**:内部强制将 `Document.ID` 对齐为 `tableDB` 约定的 `id` 字段。 - **无状态性**:不包含具体业务逻辑,如摘要生成、全文搜索等,推荐通过事件钩子实现。