Files
AI-Expert-Sidebar/internal/handler/knowledge_ops.go
T
2026-04-01 15:29:35 +08:00

42 lines
1.9 KiB
Go

// Package handler 中的 KnowledgeOps 是专门用于单条删除与数据库整体清空的业务处理入口。
// 为何我们要把它和 `LibraryHandler` 拆开?
// 因为 `LibraryHandler` 管的是**外部库的结构**(例如建库、换库、改设置)。
// 而 `KnowledgeOps` 关注的是**目前活跃库内的具体行内容**的管理,职责隔离可以降低每个文件的行数和混淆度。
package handler
import (
"context"
"AI-Expert-Sidebar/internal/service"
)
// KnowledgeOps 提供删除单个/多个记录以及清空所有记录的 Wails 绑定方法。
type KnowledgeOps struct{ ctx context.Context }
func NewKnowledgeOps() *KnowledgeOps { return &KnowledgeOps{} }
// SetContext 自动注入 ctx,供后续可能弹框等需上下文的系统调用预留。
func (k *KnowledgeOps) SetContext(ctx context.Context) { k.ctx = ctx }
// DeleteItems 根据提供的 ID 切片去批量移除当前活跃库内对应的记录(物理删除)。
//
// 使用批量(`ids []uint`)而不是单条 `Delete(id uint)` 防止在全选状态下向后端发射几十上百次 RPC 请求。
// 后端批量生成 `DELETE FROM ... WHERE ID in (...)` 使耗时极大减少。
// 错误结果若有,即转为 String 报错,无错误返回空(用于在 JS 做 Promise 级 error catch)。
func (k *KnowledgeOps) DeleteItems(ids []uint) string {
if err := service.DeleteItems(ids); err != nil {
return err.Error()
}
return ""
}
// ClearDatabase 用于快速将当前工作库恢复空状态。
// 它并不会摧毁这个库在设置 `settings.db` 中的记录(库还没死),但库里面所有的数据会瞬间化整为零。
// 这个功能非常适合测试批量导入文件之前快速清空旧脏数据的手动调整需求。
func (k *KnowledgeOps) ClearDatabase() string {
if err := service.ClearDatabase(); err != nil {
return err.Error()
}
return ""
}