Files
tueem 85e4df52a5
build / Go-Build (push) Successful in 1m1s
feat(*): initial commit
2026-06-24 00:16:21 +02:00

88 lines
1.9 KiB
Go

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))
}