From 99a15aa56748b2b508fd8d8eb8e06318de6fb9fd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Magnus=20=C3=85hall?= Date: Sun, 18 Jun 2023 22:25:34 +0200 Subject: [PATCH] Autocreate _internal.db --- db.go | 58 ++++++++++++++++++++++++++++++++++++++----- main.go | 4 --- static/css/main.css | 5 ++-- static/less/main.less | 5 ++-- 4 files changed, 58 insertions(+), 14 deletions(-) diff --git a/db.go b/db.go index 0925f68..4b6d9e8 100644 --- a/db.go +++ b/db.go @@ -21,7 +21,7 @@ var ( embedded embed.FS ) -func dbInit() (err error) { +func dbInit() (err error) {// {{{ dbConn = fmt.Sprintf( "host=%s port=%d user=%s password=%s dbname=%s sslmode=disable", config.Database.Host, @@ -37,11 +37,57 @@ func dbInit() (err error) { config.Database.Port, ) - db, err = sqlx.Connect("postgres", dbConn) - return -} + if db, err = sqlx.Connect("postgres", dbConn); err != nil { + return + } -func dbUpdate() (err error) { + if err = dbVerifyInternals(); err != nil { + return + } + + err = dbUpdate() + return +}// }}} +func dbVerifyInternals() (err error) {// {{{ + var rows *sqlx.Rows + if rows, err = db.Queryx( + `SELECT EXISTS ( + SELECT FROM pg_catalog.pg_class c + JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace + WHERE n.nspname = '_internal' + AND c.relname = 'db' + )`, + ); err != nil { + return + } + defer rows.Close() + var exists bool + rows.Next() + if err = rows.Scan(&exists); err != nil { + return + } + + if !exists { + log.Printf("\x1b[32mNotes\x1b[0m Creating _internal.db\n") + if _, err = db.Exec(` + CREATE SCHEMA "_internal"; + + CREATE TABLE "_internal".db ( + "key" varchar NOT NULL, + value varchar NULL, + CONSTRAINT db_pk PRIMARY KEY (key) + ); + + INSERT INTO _internal.db("key", "value") + VALUES('schema', '0'); + `, + ); err != nil { + return + } + } + return +}// }}} +func dbUpdate() (err error) {// {{{ /* Current schema revision is read from database. * Used to iterate through the embedded SQL updates * up to the DB_SCHEMA version currently compiled @@ -82,6 +128,6 @@ func dbUpdate() (err error) { } return -} +}// }}} // vim: foldmethod=marker diff --git a/main.go b/main.go index 6ded1b3..56b875d 100644 --- a/main.go +++ b/main.go @@ -55,10 +55,6 @@ func main() {// {{{ fmt.Printf("%s\n", err) os.Exit(1) } - if err = dbUpdate(); err != nil { - fmt.Printf("%s\n", err) - os.Exit(1) - } connectionManager = NewConnectionManager() go connectionManager.BroadcastLoop() diff --git a/static/css/main.css b/static/css/main.css index 89d80a1..b4439e7 100644 --- a/static/css/main.css +++ b/static/css/main.css @@ -136,7 +136,7 @@ header .menu { -webkit-tap-highlight-color: transparent; } .node-name { - padding: 32px; + margin: 32px 0 16px 0; background: #fff; color: #000; text-align: center; @@ -144,7 +144,7 @@ header .menu { } .node-content { justify-self: center; - padding: 0px 32px; + padding: 16px 32px; white-space: pre-wrap; font-size: 0.85em; color: #333; @@ -155,6 +155,7 @@ header .menu { } .node-content:empty { background: #ddd; + border-radius: 8px; height: 48px; } @media only screen and (max-width: 100ex) { diff --git a/static/less/main.less b/static/less/main.less index 6873be1..70ef22c 100644 --- a/static/less/main.less +++ b/static/less/main.less @@ -162,7 +162,7 @@ header { } .node-name { - padding: 32px; + margin: 32px 0 16px 0; background: #fff; color: #000; text-align: center; @@ -171,7 +171,7 @@ header { .node-content { justify-self: center; - padding: 0px 32px; + padding: 16px 32px; white-space: pre-wrap; font-size: 0.85em; color: #333; @@ -183,6 +183,7 @@ header { &:empty { background: #ddd; + border-radius: 8px; height: 48px; } }