aboutsummaryrefslogtreecommitdiff
path: root/models/persister.go
diff options
context:
space:
mode:
Diffstat (limited to 'models/persister.go')
-rw-r--r--models/persister.go37
1 files changed, 37 insertions, 0 deletions
diff --git a/models/persister.go b/models/persister.go
new file mode 100644
index 0000000..71cddc8
--- /dev/null
+++ b/models/persister.go
@@ -0,0 +1,37 @@
+package models
+
+import (
+ "github.com/dgraph-io/badger/v3"
+ "go.uber.org/zap"
+)
+
+type Persister struct {
+ log *zap.SugaredLogger
+ db *badger.DB
+}
+
+func NewPersister(log *zap.SugaredLogger, db *badger.DB) *Persister {
+ aso := &Persister{log: log, db: db}
+ return aso
+}
+
+func (p *Persister) Store(model model) error {
+ err := p.db.Update(model.Save)
+ return err
+}
+
+func (p *Persister) Count(model model) (int, error) {
+ opts := badger.DefaultIteratorOptions
+ opts.PrefetchValues = false
+ var count int
+ err := p.db.View(func(txn *badger.Txn) error {
+ it := txn.NewIterator(opts)
+ defer it.Close()
+ prefix := []byte(model.Keybase())
+ for it.Seek(prefix); it.ValidForPrefix([]byte(prefix)); it.Next() {
+ count++
+ }
+ return nil
+ })
+ return count, err
+}