6 changed files with 109 additions and 6 deletions
@ -0,0 +1,17 @@
|
||||
package db |
||||
|
||||
var ( |
||||
askSindominanteBucket = []byte("ask-sindominante") |
||||
) |
||||
|
||||
// HasBeingAskedForSindominante checks if the user has being already asked for sindominante
|
||||
func (db *DB) HasBeingAskedForSindominante(user string) bool { |
||||
var answer string |
||||
err := db.get(askSindominanteBucket, user, &answer) |
||||
return err == nil |
||||
} |
||||
|
||||
// AnswerForSindominante register the answer for sindominante for user
|
||||
func (db *DB) AnswerForSindominante(user string, answer string) error { |
||||
return db.put(askSindominanteBucket, user, answer) |
||||
} |
@ -0,0 +1,68 @@
|
||||
package db |
||||
|
||||
import ( |
||||
"encoding/json" |
||||
|
||||
"go.etcd.io/bbolt" |
||||
) |
||||
|
||||
// DB to store the status of lowry
|
||||
type DB struct { |
||||
bolt *bbolt.DB |
||||
} |
||||
|
||||
// Init database storing it in path
|
||||
func Init(path string) (*DB, error) { |
||||
bolt, err := bbolt.Open(path, 0660, nil) |
||||
if err != nil { |
||||
return nil, err |
||||
} |
||||
|
||||
err = bolt.Update(func(tx *bbolt.Tx) error { |
||||
_, err := tx.CreateBucketIfNotExists(askSindominanteBucket) |
||||
return err |
||||
}) |
||||
if err != nil { |
||||
bolt.Close() |
||||
return nil, err |
||||
} |
||||
|
||||
return &DB{bolt}, nil |
||||
} |
||||
|
||||
// Close the database
|
||||
func (db *DB) Close() { |
||||
db.bolt.Close() |
||||
} |
||||
|
||||
func (db *DB) put(bucket []byte, key string, value interface{}) error { |
||||
encodedValue, err := json.Marshal(value) |
||||
if err != nil { |
||||
return err |
||||
} |
||||
|
||||
return db.bolt.Update(func(tx *bbolt.Tx) error { |
||||
b := tx.Bucket(bucket) |
||||
return b.Put([]byte(key), encodedValue) |
||||
}) |
||||
} |
||||
|
||||
func (db *DB) get(bucket []byte, key string, value interface{}) error { |
||||
var encodedValue []byte |
||||
db.bolt.View(func(tx *bbolt.Tx) error { |
||||
b := tx.Bucket(bucket) |
||||
encodedValue = b.Get([]byte(key)) |
||||
return nil |
||||
}) |
||||
|
||||
if encodedValue == nil { |
||||
return notFoundError{} |
||||
} |
||||
return json.Unmarshal(encodedValue, value) |
||||
} |
||||
|
||||
type notFoundError struct{} |
||||
|
||||
func (e notFoundError) Error() string { |
||||
return "Not found" |
||||
} |
Loading…
Reference in new issue