@@ -0,0 +1,87 @@
|
||||
package database
|
||||
|
||||
import (
|
||||
"strconv"
|
||||
|
||||
"tomatentum.net/outfit-voting-abi26/internal"
|
||||
)
|
||||
|
||||
const INITSTATEDB string = "CREATE TABLE IF NOT EXISTS state(key varchar(255) PRIMARY KEY, value TEXT)"
|
||||
const STATEINSERT string = "INSERT INTO state(key, value) VALUES ($1, $2) ON CONFLICT (key) DO NOTHING;"
|
||||
const STATESET string = "UPDATE state SET value = $1 WHERE key = $2"
|
||||
const STATEGET string = "SELECT value FROM state WHERE key = $1"
|
||||
|
||||
const KEYVOTELOCKED string = "votinglocked"
|
||||
const KEYRESULTLOCKED string = "resultlocked"
|
||||
|
||||
var voteLocked internal.CacheItem[bool] = internal.NewCache(func() (bool, error) {
|
||||
res := db.QueryRow(STATEGET, KEYVOTELOCKED)
|
||||
|
||||
var valuestring string
|
||||
|
||||
if err := res.Scan(&valuestring); err != nil {
|
||||
return false, err
|
||||
}
|
||||
value, err := strconv.ParseBool(valuestring)
|
||||
|
||||
if err != nil {
|
||||
return false, err
|
||||
}
|
||||
return value, nil
|
||||
}, 30)
|
||||
|
||||
var resultLocked internal.CacheItem[bool] = internal.NewCache(func() (bool, error) {
|
||||
res := db.QueryRow(STATEGET, KEYRESULTLOCKED)
|
||||
|
||||
var valuestring string
|
||||
|
||||
if err := res.Scan(&valuestring); err != nil {
|
||||
return false, err
|
||||
}
|
||||
|
||||
value, err := strconv.ParseBool(valuestring)
|
||||
|
||||
if err != nil {
|
||||
return false, err
|
||||
}
|
||||
return value, nil
|
||||
}, 30)
|
||||
|
||||
func initStateDB() error {
|
||||
_, err := db.Exec(INITSTATEDB)
|
||||
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
_, err = db.Exec(STATEINSERT, KEYVOTELOCKED, "true")
|
||||
_, err = db.Exec(STATEINSERT, KEYRESULTLOCKED, "true")
|
||||
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func setState(key string, value string) error {
|
||||
_, err := db.Exec(STATESET, value, key)
|
||||
return err
|
||||
}
|
||||
|
||||
func GetVoteLocked() (bool, error) {
|
||||
return voteLocked.Get()
|
||||
}
|
||||
|
||||
func GetResultLocked() (bool, error) {
|
||||
return resultLocked.Get()
|
||||
}
|
||||
|
||||
func SetVoteLocked(value bool) error {
|
||||
voteLocked.Invalidate()
|
||||
return setState(KEYVOTELOCKED, strconv.FormatBool(value))
|
||||
}
|
||||
|
||||
func SetResultLocked(value bool) error {
|
||||
resultLocked.Invalidate()
|
||||
return setState(KEYRESULTLOCKED, strconv.FormatBool(value))
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user