2023-09-24 20:21:11 +00:00
|
|
|
package pkg
|
|
|
|
|
|
|
|
import (
|
|
|
|
"cli-go/pkg/model"
|
|
|
|
"context"
|
|
|
|
"fmt"
|
|
|
|
"log"
|
|
|
|
"time"
|
|
|
|
|
|
|
|
bolt "go.etcd.io/bbolt"
|
|
|
|
)
|
|
|
|
|
|
|
|
func GetDB(path string) (*bolt.DB, error) {
|
|
|
|
db, err := bolt.Open(path, 0600, &bolt.Options{Timeout: 1 * time.Second})
|
|
|
|
if err != nil {
|
|
|
|
log.Fatal(err)
|
|
|
|
}
|
|
|
|
return db, err
|
|
|
|
}
|
|
|
|
|
|
|
|
func (c *ClICtrl) GetConfigValue(ctx context.Context, key string) ([]byte, error) {
|
|
|
|
var value []byte
|
|
|
|
err := c.DB.View(func(tx *bolt.Tx) error {
|
|
|
|
kvBucket, err := getAccountStore(ctx, tx, model.KVConfig)
|
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
value = kvBucket.Get([]byte(key))
|
|
|
|
return nil
|
|
|
|
})
|
|
|
|
return value, err
|
|
|
|
}
|
|
|
|
|
|
|
|
func (c *ClICtrl) PutConfigValue(ctx context.Context, key string, value []byte) error {
|
|
|
|
return c.DB.Update(func(tx *bolt.Tx) error {
|
|
|
|
kvBucket, err := getAccountStore(ctx, tx, model.KVConfig)
|
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
return kvBucket.Put([]byte(key), value)
|
|
|
|
})
|
|
|
|
}
|
2023-09-25 02:40:15 +00:00
|
|
|
func (c *ClICtrl) PutValue(ctx context.Context, store model.PhotosStore, key []byte, value []byte) error {
|
|
|
|
return c.DB.Update(func(tx *bolt.Tx) error {
|
|
|
|
kvBucket, err := getAccountStore(ctx, tx, store)
|
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
return kvBucket.Put(key, value)
|
|
|
|
})
|
|
|
|
}
|
2023-09-24 20:21:11 +00:00
|
|
|
|
|
|
|
func getAccountStore(ctx context.Context, tx *bolt.Tx, storeType model.PhotosStore) (*bolt.Bucket, error) {
|
|
|
|
accountId := ctx.Value("account_id").(string)
|
|
|
|
accountBucket := tx.Bucket([]byte(accountId))
|
|
|
|
if accountBucket == nil {
|
|
|
|
return nil, fmt.Errorf("account bucket not found")
|
|
|
|
}
|
|
|
|
store := accountBucket.Bucket([]byte(storeType))
|
|
|
|
if store == nil {
|
|
|
|
return nil, fmt.Errorf("store %s not found", storeType)
|
|
|
|
}
|
|
|
|
return store, nil
|
|
|
|
}
|