From 8a8124c373170f4baa23a2939105ad72e4a8ffea Mon Sep 17 00:00:00 2001 From: Gadzhi Kharkharov Date: Fri, 26 Nov 2021 21:28:59 +0300 Subject: [PATCH] wip: db --- vdir/db.go | 92 +++++++++++++++++++++++++++++++++++++++++++++++ vdir/item_test.go | 2 +- vdir/vdir.go | 19 ---------- vdir/vdir_test.go | 18 ++++++++++ 4 files changed, 111 insertions(+), 20 deletions(-) create mode 100644 vdir/db.go diff --git a/vdir/db.go b/vdir/db.go new file mode 100644 index 0000000..3b83504 --- /dev/null +++ b/vdir/db.go @@ -0,0 +1,92 @@ +package vdir + +import ( + "fmt" + "os" + "path/filepath" + + "github.com/boltdb/bolt" +) + +var bucketName = "todos" + +func dbPath() (dbPath string, err error) { + userCacheDir, err := os.UserCacheDir() + if err != nil { + return "", fmt.Errorf("get cache dir: %w", err) + } + cacheDir := filepath.Join(userCacheDir, "tdx") + if err := os.MkdirAll(cacheDir, 0700); err != nil { + return "", fmt.Errorf("create cache dir: %w", err) + } + dbPath = filepath.Join(cacheDir, "db") + return +} + +func updateDB() error { + path, err := dbPath() + if err != nil { + return err + } + + db, err := bolt.Open(path, 0644, nil) + if err != nil { + return fmt.Errorf("open db: %w", err) + } + defer db.Close() + + if err != nil { + return err + } + + key := []byte("hey") + val := []byte("world") + + err = db.Update(func(tx *bolt.Tx) error { + bucket, err := tx.CreateBucketIfNotExists([]byte(bucketName)) + if err != nil { + return err + } + + err = bucket.Put(key, val) + if err != nil { + return err + } + return nil + }) + + return nil +} + +func viewDB() (string, error) { + path, err := dbPath() + if err != nil { + return "", err + } + + db, err := bolt.Open(path, 0644, nil) + if err != nil { + return "", fmt.Errorf("open db: %w", err) + } + defer db.Close() + + key := []byte("hey") + var val []byte + + err = db.View(func(tx *bolt.Tx) error { + bucket := tx.Bucket([]byte(bucketName)) + if bucket == nil { + return fmt.Errorf("Bucket %q not found", bucketName) + } + val = bucket.Get(key) + + return nil + }) + + if err != nil { + return "", err + } + fmt.Println(string(key), string(val)) + + return string(val), nil +} diff --git a/vdir/item_test.go b/vdir/item_test.go index bb054cc..73595e1 100644 --- a/vdir/item_test.go +++ b/vdir/item_test.go @@ -15,7 +15,7 @@ func TestTags(t *testing.T) { path string want []Tag }{ - {vdpath, []Tag{"#Quebec", "#1some", "#tags", "#go", "#sway", "#Later"}}, + {vdpath, []Tag{"#quebec", "#1some", "#tags", "#go", "#sway", "#later"}}, } for _, tt := range tests { t.Run("", func(t *testing.T) { diff --git a/vdir/vdir.go b/vdir/vdir.go index 7b875e5..0cf8ab3 100644 --- a/vdir/vdir.go +++ b/vdir/vdir.go @@ -10,31 +10,12 @@ import ( "os" "path/filepath" - "github.com/boltdb/bolt" "github.com/emersion/go-ical" ) // Vdir is a map of all collections and items type Vdir map[*Collection][]*Item -func initDB(opts *bolt.Options) (*bolt.DB, error) { - userCacheDir, err := os.UserCacheDir() - if err != nil { - return nil, fmt.Errorf("get cache dir: %w", err) - } - cacheDir := filepath.Join(userCacheDir, "tdx") - if err := os.MkdirAll(cacheDir, 0700); err != nil { - return nil, fmt.Errorf("create cache dir: %w", err) - } - dbPath := filepath.Join(cacheDir, "db") - db, err := bolt.Open(dbPath, 0644, nil) - if err != nil { - return nil, fmt.Errorf("open db: %w", err) - } - - return db, nil -} - // Init initializes the map with collections and items in path, items have unique IDs func (v *Vdir) Init(path string) error { f, err := os.Stat(path) diff --git a/vdir/vdir_test.go b/vdir/vdir_test.go index 7f6e849..d24d704 100644 --- a/vdir/vdir_test.go +++ b/vdir/vdir_test.go @@ -32,3 +32,21 @@ func TestInit(t *testing.T) { }) } } + +func TestUpdateDB(t *testing.T) { + t.Run("", func(t *testing.T) { + err := updateDB() + if err != nil { + t.Fatal(err) + } + }) +} + +func TestViewDB(t *testing.T) { + t.Run("", func(t *testing.T) { + _, err := viewDB() + if err != nil { + t.Fatal(err) + } + }) +}