ictgj-voting/model.go

85 lines
1.5 KiB
Go

package main
import (
"errors"
"strings"
"github.com/br0xen/boltease"
)
var db *boltease.DB
var dbOpened int
func openDatabase() error {
dbOpened += 1
if dbOpened == 1 {
var err error
db, err = boltease.Create(site.DB, 0600, nil)
if err != nil {
return err
}
}
return nil
}
func closeDatabase() error {
dbOpened -= 1
if dbOpened == 0 {
return db.CloseDB()
}
return nil
}
func initDatabase() error {
var err error
if err = openDatabase(); err != nil {
return err
}
defer closeDatabase()
// Create the path to the bucket to store admin users
if err := db.MkBucketPath([]string{"users"}); err != nil {
return err
}
// Create the path to the bucket to store jam informations
if err := db.MkBucketPath([]string{"jam"}); err != nil {
return err
}
// Create the path to the bucket to store site config data
return db.MkBucketPath([]string{"site"})
}
func dbSetCurrentJam(name string) error {
var err error
if err = openDatabase(); err != nil {
return err
}
defer closeDatabase()
return db.SetValue([]string{"site"}, "current-jam", name)
}
func dbHasCurrentJam() bool {
var err error
if _, err = dbGetCurrentJam(); err != nil {
return false
}
return true
}
func dbGetCurrentJam() (string, error) {
var ret string
var err error
if err = openDatabase(); err != nil {
return "", err
}
defer closeDatabase()
ret, err = db.GetValue([]string{"site"}, "current-jam")
if err == nil && strings.TrimSpace(ret) == "" {
return ret, errors.New("No Jam Name Specified")
}
return ret, err
}