admin_backend/util/bbolt.go
2026-01-19 18:53:24 +08:00

97 lines
2.1 KiB
Go

package util
import (
"fmt"
"os"
"path/filepath"
"go.etcd.io/bbolt"
)
var bucket *bbolt.DB
func InitBBolt() error {
// 初始化bbolt数据库的逻辑
// ensure directory exists before opening DB
dbPath := "runtime/data.db"
if err := os.MkdirAll(filepath.Dir(dbPath), 0o755); err != nil {
return err
}
db, err := bbolt.Open(dbPath, 0600, nil)
if err != nil {
return err
}
// keep the DB open for the package lifecycle
bucket = db
// ensure the "kv" bucket exists
err = bucket.Update(func(tx *bbolt.Tx) error {
_, err := tx.CreateBucketIfNotExists([]byte("kv"))
return err
})
if err != nil {
// cleanup on failure to initialize buckets
_ = bucket.Close()
bucket = nil
return err
}
return nil
}
func saveBBolt(key string, value interface{}) error {
newValue := String(value)
err := bucket.Update(func(tx *bbolt.Tx) error {
b := tx.Bucket([]byte("kv"))
return b.Put([]byte(key), []byte(newValue))
})
return err
}
func getBBolt(key string) (string, error) {
var value string
err := bucket.View(func(tx *bbolt.Tx) error {
b := tx.Bucket([]byte("kv"))
v := b.Get([]byte(key))
value = string(v)
return nil
})
return value, err
}
func SaveLanguageLastUpdate(timestamp interface{}) error {
return saveBBolt("language_last_update", timestamp)
}
func GetLanguageLastUpdate() (int, error) {
v, e := getBBolt("language_last_update")
return Int(v), e
}
func SaveLanguageExportLastUpdate(timestamp interface{}) error {
return saveBBolt("language_export_last_update", timestamp)
}
func GetLanguageExportLastUpdate() (int, error) {
v, e := getBBolt("language_export_last_update")
return Int(v), e
}
func GetGitHead(key string) (string, error) {
return getBBolt(fmt.Sprintf("git_head_%s", key))
}
func SaveGitHead(key string, head interface{}) error {
return saveBBolt(fmt.Sprintf("git_head_%s", key), head)
}
func GetUserConnectNode(Uid string) (int, error) {
v, e := getBBolt(fmt.Sprintf("user_connect_node_%s", Uid))
return Int(v), e
}
func SaveUserConnectNode(Uid string, node interface{}) error {
return saveBBolt(fmt.Sprintf("user_connect_node_%s", Uid), node)
}