Start database interface/model/iterator revamp

This commit is contained in:
Daniel 2018-08-31 17:36:32 +02:00
parent e40d66e103
commit f8ff7d143e
6 changed files with 66 additions and 0 deletions

View file

@ -0,0 +1,18 @@
package iterator
import (
"github.com/Safing/portbase/database/model"
)
// Iterator defines the iterator structure.
type Iterator struct {
Next chan model.Model
Error error
}
// New creates a new Iterator.
func New() *Iterator {
return &Iterator{
Next: make(chan model.Model, 10),
}
}

7
database/model/model.go Normal file
View file

@ -0,0 +1,7 @@
package model
type Meta struct {
}
type Model interface {
}

View file

@ -0,0 +1 @@
package badger

View file

@ -0,0 +1,9 @@
package bbolt
import bolt "go.etcd.io/bbolt"
db, err := bolt.Open(path, 0666, nil)
if err != nil {
return err
}
defer db.Close()

View file

@ -0,0 +1,30 @@
package storage
import (
"github.com/Safing/portbase/database/iterator"
"github.com/Safing/portbase/database/model"
)
// Interface defines the database storage API.
type Interface interface {
// Full
Exists(key string) (bool, error)
Get(key string) (model.Model, error)
Create(key string, model model.Model) error
Update(key string, model model.Model) error // create when not exists
UpdateOrCreate(key string, model model.Model) error // update, create if not exists.
Delete(key string) error
// Partial
// What happens if I mutate a value that does not yet exist? How would I know its type?
InsertPartial(key string, partialObject interface{})
InsertValue(key string, attribute string, value interface{})
// Query
Query(*query.Query) (*iterator.Iterator, error)
// Meta
LetExpire(key string, timestamp int64) error
MakeSecret(key string) error // only visible internal
MakeCrownJewel(key string) error // do not sync between devices
}

View file

@ -0,0 +1 @@
package kvops