73 lines
1.8 KiB
Markdown
73 lines
1.8 KiB
Markdown
|
|
# @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` 字段。
|
||
|
|
- **无状态性**:不包含具体业务逻辑,如摘要生成、全文搜索等,推荐通过事件钩子实现。
|