ictgj-voting/model.go

92 lines
1.8 KiB
Go

package main
import "github.com/br0xen/boltease"
var db *boltease.DB
var dbOpened bool
func openDatabase() error {
if !dbOpened {
var err error
db, err = boltease.Create(site.DB, 0600, nil)
if err != nil {
return err
}
dbOpened = true
}
return nil
}
func initDatabase() error {
openDatabase()
// 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{"jams"}); 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 {
if err := db.OpenDB(); err != nil {
return err
}
defer db.CloseDB()
return db.SetValue([]string{"site"}, "current-jam", name)
}
func dbHasCurrentJam() bool {
var nm string
var err error
if nm, err = dbGetCurrentJam(); err != nil {
return false
}
ret, err := dbIsValidJam(nm)
return ret && err != nil
}
func dbGetCurrentJam() (string, error) {
if err := db.OpenDB(); err != nil {
return "", err
}
defer db.CloseDB()
return db.GetValue([]string{"site"}, "current-jam")
}
func dbIsValidJam(name string) (bool, error) {
var err error
if err = db.OpenDB(); err != nil {
return false, err
}
defer db.CloseDB()
// Get all keys in the jams bucket
var keys []string
if keys, err = db.GetKeyList([]string{"jams", name}); err != nil {
return false, err
}
// All valid gamejams will have:
// "name"
// "teams"
for _, v := range []string{"name", "teams"} {
found := false
for j := range keys {
if keys[j] == v {
found = true
break
}
}
if !found {
// If we make it here, we didn't find a key we need
return false, nil
}
}
return true, nil
}