set bdd
This commit is contained in:
79
bdd/bdd.go
79
bdd/bdd.go
@ -1,27 +1,82 @@
|
||||
package bdd
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"fmt"
|
||||
"log"
|
||||
"time"
|
||||
|
||||
bolt "go.etcd.io/bbolt"
|
||||
"github.com/boltdb/bolt"
|
||||
)
|
||||
|
||||
// BDD_VOTES est le nom de la base
|
||||
var BDD_VOTES = "VotesBucket"
|
||||
|
||||
// InitBDD initialise la BDD
|
||||
func InitBDD() {
|
||||
// OpenDB a key-value store.
|
||||
func OpenDB() (*bolt.DB, error) {
|
||||
db, err := bolt.Open("foods.db", 0600, nil)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
return nil, fmt.Errorf("could not open db, %v", err)
|
||||
}
|
||||
|
||||
db.Update(func(tx *bolt.Tx) error {
|
||||
_, err := tx.CreateBucketIfNotExists([]byte(BDD_VOTES))
|
||||
err = db.Update(func(tx *bolt.Tx) error {
|
||||
root, err := tx.CreateBucketIfNotExists([]byte("DB"))
|
||||
if err != nil {
|
||||
return fmt.Errorf("create bucket: %s", err)
|
||||
return fmt.Errorf("could not create root bucket: %v", err)
|
||||
}
|
||||
_, err = root.CreateBucketIfNotExists([]byte("VOTES"))
|
||||
if err != nil {
|
||||
return fmt.Errorf("could not create votes bucket: %v", err)
|
||||
}
|
||||
return nil
|
||||
})
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("could not set up buckets, %v", err)
|
||||
}
|
||||
return db, nil
|
||||
|
||||
}
|
||||
|
||||
// CloseDB closes the key-value store file.
|
||||
func CloseDB(db *bolt.DB) error {
|
||||
return db.Close()
|
||||
}
|
||||
|
||||
// AddVote ajoute un vote à la bdd
|
||||
func AddVote(db *bolt.DB, vote string, date time.Time) error {
|
||||
|
||||
err := db.Update(func(tx *bolt.Tx) error {
|
||||
err := tx.Bucket([]byte("DB")).Bucket([]byte("VOTES")).Put([]byte(date.Format(time.RFC3339)), []byte(vote))
|
||||
if err != nil {
|
||||
return fmt.Errorf("could not insert vote: %v", err)
|
||||
}
|
||||
return nil
|
||||
})
|
||||
fmt.Println("Added vote")
|
||||
return err
|
||||
}
|
||||
|
||||
// GetAllVotes liste tous les votes
|
||||
func GetAllVotes(db *bolt.DB) ([]string, error) {
|
||||
|
||||
res := []string{}
|
||||
err := db.View(func(tx *bolt.Tx) error {
|
||||
b := tx.Bucket([]byte("DB")).Bucket([]byte("VOTES"))
|
||||
b.ForEach(func(k, v []byte) error {
|
||||
res = append(res, string(v))
|
||||
return nil
|
||||
})
|
||||
return nil
|
||||
})
|
||||
return res, err
|
||||
}
|
||||
|
||||
// GetVotesOfTheDay liste tous les votes du jour
|
||||
func GetVotesOfTheDay(db *bolt.DB, date time.Time) ([]string, error) {
|
||||
res := []string{}
|
||||
err := db.View(func(tx *bolt.Tx) error {
|
||||
c := tx.Bucket([]byte("DB")).Bucket([]byte("VOTES")).Cursor()
|
||||
min := []byte(time.Now().AddDate(0, 0, -1).Format(time.RFC3339))
|
||||
max := []byte(time.Now().AddDate(0, 0, 0).Format(time.RFC3339))
|
||||
for k, v := c.Seek(min); k != nil && bytes.Compare(k, max) <= 0; k, v = c.Next() {
|
||||
res = append(res, string(v))
|
||||
}
|
||||
return nil
|
||||
})
|
||||
return res, err
|
||||
}
|
||||
|
Reference in New Issue
Block a user