Files
proxy-lite/internal/noodle/database.go

91 lines
1.6 KiB
Go

package noodle
import (
"log"
"github.com/google/uuid"
"go.mills.io/bitcask/v2"
)
type Database struct {
connection *bitcask.Bitcask
Handle *bitcask.Collection
}
func NewDatabase(path string) *Database {
db, err := bitcask.Open(path)
if err != nil {
log.Fatal(err)
}
return &Database{
connection: db,
Handle: db.Collection("noodles"),
}
}
func (db *Database) MakeID() string {
id, err := uuid.NewUUID()
if err != nil {
log.Print(err)
return ""
}
return id.String()
}
func (db *Database) GetAll() []Noodle {
var data []Noodle
if err := db.Handle.List(&data); err != nil {
log.Print(err)
return nil
}
return data
}
func (db *Database) GetAllGeneric() []interface{} {
var data []interface{}
if err := db.Handle.List(&data); err != nil {
log.Print(err)
return nil
}
return data
}
func (db *Database) Get(id string) Noodle {
var item Noodle
log.Printf("Looking up noodle key='%s'", id)
log.Printf("key='%s' exists=%t", id, db.Handle.Has(id))
if err := db.Handle.Get(id, &item); err != nil {
log.Print(err)
return Noodle{}
}
return item
}
func (db *Database) Add(item Noodle) error {
if err := db.Handle.Add(item.Id, item); err != nil {
log.Print(err)
return err
}
return nil
}
func (db *Database) Update(item Noodle) error {
if err := db.Handle.Add(item.Id, item); err != nil {
log.Print(err)
return err
}
return nil
}
func (db *Database) Delete(id string) error {
if err := db.Handle.Delete(id); err != nil {
log.Print(err)
return err
}
return nil
}
func (db *Database) Close() error {
return db.connection.Close()
}