49 lines
1.1 KiB
Go
49 lines
1.1 KiB
Go
package db
|
|
|
|
import (
|
|
"database/sql"
|
|
"fmt"
|
|
"os"
|
|
|
|
"github.com/jmoiron/sqlx"
|
|
_config "github.com/johannesbuehl/golunteer/backend/pkg/config"
|
|
_ "modernc.org/sqlite" // SQLite driver
|
|
)
|
|
|
|
var config = _config.Config
|
|
|
|
// connection to database
|
|
var DB *sqlx.DB
|
|
|
|
func init() {
|
|
// connect to the database
|
|
DB = sqlx.MustOpen("sqlite", config.Database)
|
|
|
|
DB.MustExec("PRAGMA foreign_keys = ON")
|
|
|
|
// create the tables if they don't exist
|
|
if dbSetupInstructions, err := os.ReadFile("tables.sql"); err != nil {
|
|
panic("can't read database-tables-setup")
|
|
} else {
|
|
DB.MustExec(string(dbSetupInstructions))
|
|
|
|
// take wether the admin-user is present as an indicator to a new instance
|
|
var admin struct {
|
|
Admin bool `db:"admin"`
|
|
}
|
|
if err := DB.QueryRowx("SELECT admin FROM USERS WHERE userName = 'admin'").StructScan(&admin); err != nil {
|
|
// if the error isn't because there was no result, it's a real one
|
|
if err != sql.ErrNoRows {
|
|
panic(fmt.Errorf("can't query for the admin-user: %v", err))
|
|
} else {
|
|
// setup everything
|
|
setup()
|
|
fmt.Println("setup completed")
|
|
|
|
// reload the config
|
|
_config.LoadConfig()
|
|
}
|
|
}
|
|
}
|
|
}
|