tableDB/README.md

1.5 KiB
Raw Blame History

apigo.cc/go/tableDB

tableDB 是建立在 apigo.cc/go/db 基础上的更高层抽象工具库。提供对于动态表、数据权限隔离和 Hook 的生命周期追踪管理。

使用指南

1. 初始化与 Auth

package main

import (
	"apigo.cc/go/tableDB"
	"apigo.cc/go/log"
)

func main() {
	app := tableDB.GetDB("sqlite://local.db", log.DefaultLogger)
	
	// 在需要忽略权限的系统级后台执行时:
	systemApp := app.Auth(tableDB.SystemUserID)
	
	// 在特定的业务上下文执行时,将强制携带 creator 约束
	userApp := app.Auth("user_12345")
}

2. DSL 动态表声明与同步

TableDB 提供底层隐藏表机制自动补全如 idautoIndex,可用于初始化表结构。

schema := `
== UserGroup ==
users SD
  name v50 U
  age i
`
_ = app.SyncSchema(schema)

3. 生命周期 Hooks 订阅

通过注册 Hooks我们可以在发生元数据变更或行更新时进行回调拦截

app.Hooks.OnUpdatingRow = func(tableName string, row map[string]any) error {
	if tableName == "users" {
		row["modifiedAt"] = time.Now().Unix()
	}
	return nil
}

4. 动态表增删改查

底层调用与 go/db 使用习惯对齐,不同点是操作会被权限或 Hook 钩子影响:

// 设定数据,如 ID 缺省会自动生成 c10 ID
_ = userApp.Table("users").Set(map[string]any{"name": "Alice"})

// 读取
record, _ := userApp.Table("users").Get("u1xxxx")

// 统计
count, _ := userApp.Table("users").Count(map[string]any{"age >": 20})