You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
superhighway84/cache/cache.go

58 lines
1.0 KiB
Go

package cache
import (
"encoding/json"
"github.com/mrusme/superhighway84/models"
"github.com/tidwall/buntdb"
)
type Cache struct {
db *buntdb.DB
dbPath string
}
func NewCache(dbPath string) (*Cache, error) {
var err error
cache := new(Cache)
cache.dbPath = dbPath
cache.db, err = buntdb.Open(cache.dbPath)
if err != nil {
return nil, err
}
return cache, nil
}
func(cache *Cache) Close() {
cache.db.Close()
}
func(cache *Cache) StoreArticle(article *models.Article) (error) {
modelJson, jsonErr := json.Marshal(article)
if jsonErr != nil {
return jsonErr
}
err := cache.db.Update(func(tx *buntdb.Tx) error {
_, _, err := tx.Set(article.ID, string(modelJson), nil)
return err
})
return err
}
func(cache *Cache) LoadArticle(article *models.Article) (error) {
err := cache.db.View(func(tx *buntdb.Tx) error {
value, err := tx.Get(article.ID)
if err != nil{
return err
}
json.Unmarshal([]byte(value), article)
return nil
})
return err
}