The main server, and probably only repository in this org.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

125 lines
2.4 KiB

package sqlite
import (
"log"
"strings"
"github.com/jmoiron/sqlx"
// sqlite driver
_ "github.com/mattn/go-sqlite3"
)
var db *sqlx.DB
// Initialize sets up the sqlite database.
func Initialize(filename string) (err error) {
if db != nil {
panic("sqlite.Initialize called twice!")
}
db, err = sqlx.Open("sqlite3", filename)
if err != nil {
db = nil
return err
}
err = db.Ping()
if err != nil {
db.Close()
db = nil
return err
}
tableDefs := strings.Split(tableDefStr, ";")
for i, tableDef := range tableDefs {
query := strings.Trim(tableDef, "\n  ")
if len(query) < 2 {
continue
}
_, err := db.Exec(query)
if err != nil {
log.Printf("Statement %d failed", i)
db.Close()
db = nil
return err
}
}
return nil
}
const tableDefStr = `
CREATE TABLE IF NOT EXISTS "user" (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name VARCHAR(64) NOT NULL UNIQUE,
hash VARCHAR(128) NOT NULL
);
CREATE TABLE IF NOT EXISTS "session" (
id CHAR(64) PRIMARY KEY,
user_id INTEGER NOT NULL,
expire_date DATE NOT NULL
);
CREATE TABLE IF NOT EXISTS "bridge" (
id INTEGER PRIMARY KEY AUTOINCREMENT,
internal_id VARCHAR(255) NOT NULL,
name VARCHAR(255) NOT NULL,
driver VARCHAR(255) NOT NULL,
addr VARCHAR(255) NOT NULL,
key BLOB NOT NULL
);
CREATE TABLE IF NOT EXISTS "light" (
id INTEGER PRIMARY KEY AUTOINCREMENT,
bridge_id INTEGER NOT NULL,
internal_id VARCHAR(255) NOT NULL,
group_id INTEGER NOT NULL,
name VARCHAR(255) NOT NULL,
enabled BOOLEAN NOT NULL,
color VARCHAR(255) NOT NULL,
brightness INTEGER NOT NULL
);
CREATE TABLE IF NOT EXISTS "button" (
id INTEGER PRIMARY KEY AUTOINCREMENT,
bridge_id INTEGER NOT NULL,
internal_index INTEGER NOT NULL,
internal_id VARCHAR(255) NOT NULL,
target_group_id INTEGER NOT NULL,
name VARCHAR(255) NOT NULL,
kind VARCHAR(255) NOT NULL,
missing BOOLEAN NOT NULL,
num_buttons INTEGER NOT NULL
);
CREATE TABLE IF NOT EXISTS "group" (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name VARCHAR(255) NOT NULL
);
CREATE TABLE IF NOT EXISTS "group_permission" (
group_id INT NOT NULL,
user_id INT NOT NULL,
read BOOLEAN NOT NULL,
write BOOLEAN NOT NULL,
'create' BOOLEAN NOT NULL,
'delete' BOOLEAN NOT NULL,
manage BOOLEAN NOT NULL,
PRIMARY KEY (group_id, user_id)
);
CREATE TABLE IF NOT EXISTS "group_light" (
group_id INT NOT NULL,
light_id INT NOT NULL,
PRIMARY KEY (group_id, light_id)
);
REPLACE INTO "group" (id, name) VALUES (0, "Lonely Lights");
`