zeit/z/database.go

110 lines
2.3 KiB
Go
Raw Normal View History

2020-10-11 14:12:48 +00:00
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()
}
2020-10-11 19:36:08 +00:00
func (database *Database) AddEntry(entry Entry, setRunning bool) (string, error) {
2020-10-11 14:12:48 +00:00
id := database.NewID()
entryJson, jsonerr := json.Marshal(entry)
if jsonerr != nil {
return id, jsonerr
}
dberr := database.DB.Update(func(tx *buntdb.Tx) error {
2020-10-11 19:36:08 +00:00
if setRunning == true {
_, _, seterr := tx.Set(entry.User + ":status:running", id, nil)
if seterr != nil {
return seterr
}
}
_, _, seterr := tx.Set(entry.User + ":entry:" + id, string(entryJson), nil)
if seterr != nil {
return seterr
}
return nil
2020-10-11 14:12:48 +00:00
})
return id, dberr
}
2020-10-11 19:36:08 +00:00
func (database *Database) AddRunningEntryId(user string, id string) (string, error) {
var runningId string = ""
dberr := database.DB.View(func(tx *buntdb.Tx) error {
tx.AscendKeys(user + ":running", func(key, value string) bool {
runningId = value
return true
})
return nil
})
return runningId, dberr
}
func (database *Database) GetRunningEntryId(user string) (string, error) {
var runningId string = ""
dberr := database.DB.View(func(tx *buntdb.Tx) error {
tx.AscendKeys(user + ":status:running", func(key, value string) bool {
runningId = value
return true
})
return nil
})
return runningId, dberr
}
2020-10-11 14:12:48 +00:00
func (database *Database) ListEntries() ([]Entry, error) {
var entries []Entry
dberr := database.DB.View(func(tx *buntdb.Tx) error {
2020-10-11 19:36:08 +00:00
tx.AscendKeys("*:entry:*", func(key, value string) bool {
2020-10-11 14:12:48 +00:00
var entry Entry
json.Unmarshal([]byte(value), &entry)
entry.ID = key
entries = append(entries, entry)
return true
})
return nil
})
return entries, dberr
}