Continue work on database module

This commit is contained in:
Daniel 2018-09-06 19:06:13 +02:00
parent 7ad09b60c1
commit b8e7f90dbe
25 changed files with 962 additions and 1073 deletions

View file

@ -4,17 +4,13 @@ package database
import (
"errors"
"fmt"
"os"
"path"
"strings"
"github.com/Safing/safing-core/database/dbutils"
"github.com/Safing/safing-core/log"
"github.com/Safing/safing-core/meta"
)
var ErrNotFound = errors.New("database: entry could not be found")
// Errors
var (
ErrNotFound = errors.New("database: entry could not be found")
ErrPermissionDenied = errors.New("database: access to record denied")
)
func init() {
// if strings.HasSuffix(os.Args[0], ".test") {
@ -59,84 +55,66 @@ func init() {
// return db.Close()
// }
func Get(key *ds.Key) (Model, error) {
data, err := db.Get(*key)
if err != nil {
switch err {
case ds.ErrNotFound:
return nil, ErrNotFound
default:
return nil, err
}
}
model, ok := data.(Model)
if !ok {
return nil, errors.New("database did not return model")
}
return model, nil
}
// func Get(key *ds.Key) (Model, error) {
// data, err := db.Get(*key)
// if err != nil {
// switch err {
// case ds.ErrNotFound:
// return nil, ErrNotFound
// default:
// return nil, err
// }
// }
// model, ok := data.(Model)
// if !ok {
// return nil, errors.New("database did not return model")
// }
// return model, nil
// }
func GetAndEnsureModel(namespace *ds.Key, name string, model Model) (Model, error) {
newKey := namespace.ChildString(getTypeName(model)).Instance(name)
data, err := Get(&newKey)
if err != nil {
return nil, err
}
newModel, err := EnsureModel(data, model)
if err != nil {
return nil, err
}
newModel.SetKey(&newKey)
return newModel, nil
}
func Has(key ds.Key) (exists bool, err error) {
return db.Has(key)
}
func Create(key ds.Key, model Model) (err error) {
handleCreateSubscriptions(model)
err = db.Put(key, model)
if err != nil {
log.Tracef("database: failed to create entry %s: %s", key, err)
}
return err
}
func Update(key ds.Key, model Model) (err error) {
handleUpdateSubscriptions(model)
err = db.Put(key, model)
if err != nil {
log.Tracef("database: failed to update entry %s: %s", key, err)
}
return err
}
func Delete(key ds.Key) (err error) {
handleDeleteSubscriptions(&key)
return db.Delete(key)
}
func Query(q dsq.Query) (dsq.Results, error) {
return db.Query(q)
}
func RawGet(key ds.Key) (*dbutils.Wrapper, error) {
data, err := db.Get(key)
if err != nil {
return nil, err
}
wrapped, ok := data.(*dbutils.Wrapper)
if !ok {
return nil, errors.New("returned data is not a wrapper")
}
return wrapped, nil
}
func RawPut(key ds.Key, value interface{}) error {
return db.Put(key, value)
}
// func Has(key ds.Key) (exists bool, err error) {
// return db.Has(key)
// }
//
// func Create(key ds.Key, model Model) (err error) {
// handleCreateSubscriptions(model)
// err = db.Put(key, model)
// if err != nil {
// log.Tracef("database: failed to create entry %s: %s", key, err)
// }
// return err
// }
//
// func Update(key ds.Key, model Model) (err error) {
// handleUpdateSubscriptions(model)
// err = db.Put(key, model)
// if err != nil {
// log.Tracef("database: failed to update entry %s: %s", key, err)
// }
// return err
// }
//
// func Delete(key ds.Key) (err error) {
// handleDeleteSubscriptions(&key)
// return db.Delete(key)
// }
//
// func Query(q dsq.Query) (dsq.Results, error) {
// return db.Query(q)
// }
//
// func RawGet(key ds.Key) (*dbutils.Wrapper, error) {
// data, err := db.Get(key)
// if err != nil {
// return nil, err
// }
// wrapped, ok := data.(*dbutils.Wrapper)
// if !ok {
// return nil, errors.New("returned data is not a wrapper")
// }
// return wrapped, nil
// }
//
// func RawPut(key ds.Key, value interface{}) error {
// return db.Put(key, value)
// }