Implemented Database

This commit is contained in:
マリウス 2020-10-11 15:12:48 +01:00
parent 1d0e862078
commit ac66415e97
No known key found for this signature in database
GPG key ID: C228EF0A530AF06F

69
z/database.go Normal file
View file

@ -0,0 +1,69 @@
package z
import (
"log"
"encoding/json"
"github.com/tidwall/buntdb"
"github.com/google/uuid"
)
type Database struct {
DB *buntdb.DB
}
func InitDatabase() (*Database, error) {
db, err := buntdb.Open(":memory:") // TODO: Replace with file
if err != nil {
return nil, err
}
db.CreateIndex("task", "*", buntdb.IndexJSON("task"))
db.CreateIndex("project", "*", buntdb.IndexJSON("project"))
database := Database{db}
return &database, nil
}
func (database *Database) NewID() (string) {
id, err := uuid.NewRandom()
if err != nil {
log.Fatalln("Could not generate UUID: %+v", err)
}
return id.String()
}
func (database *Database) AddEntry(entry Entry) (string, error) {
id := database.NewID()
entryJson, jsonerr := json.Marshal(entry)
if jsonerr != nil {
return id, jsonerr
}
dberr := database.DB.Update(func(tx *buntdb.Tx) error {
_, _, seterr := tx.Set(id, string(entryJson), nil)
return seterr
})
return id, dberr
}
func (database *Database) ListEntries() ([]Entry, error) {
var entries []Entry
dberr := database.DB.View(func(tx *buntdb.Tx) error {
tx.Ascend("task", func(key, value string) bool {
var entry Entry
json.Unmarshal([]byte(value), &entry)
entry.ID = key
entries = append(entries, entry)
return true
})
return nil
})
return entries, dberr
}