fixed issues with first-time setup, added config.db.port
This commit is contained in:
parent
7bea6b548e
commit
3d674515ce
|
@ -20,9 +20,13 @@ func CheckDBVersionAndMigrate(db *sqlx.DB) {
|
||||||
)
|
)
|
||||||
|
|
||||||
oldDBVersion := 0
|
oldDBVersion := 0
|
||||||
|
schemaVersionCount := 0
|
||||||
err := db.Get(&oldDBVersion, "SELECT MAX(version) FROM schema_version")
|
err := db.Get(&schemaVersionCount, "SELECT COUNT(*) FROM schema_version")
|
||||||
if err != nil { panic(err) }
|
if err != nil { panic(err) }
|
||||||
|
if schemaVersionCount > 0 {
|
||||||
|
err := db.Get(&oldDBVersion, "SELECT MAX(version) FROM schema_version")
|
||||||
|
if err != nil { panic(err) }
|
||||||
|
}
|
||||||
|
|
||||||
for oldDBVersion < DB_VERSION {
|
for oldDBVersion < DB_VERSION {
|
||||||
switch oldDBVersion {
|
switch oldDBVersion {
|
||||||
|
|
|
@ -13,6 +13,7 @@ import (
|
||||||
type (
|
type (
|
||||||
dbConfig struct {
|
dbConfig struct {
|
||||||
Host string `toml:"host"`
|
Host string `toml:"host"`
|
||||||
|
Port int64 `toml:"port"`
|
||||||
Name string `toml:"name"`
|
Name string `toml:"name"`
|
||||||
User string `toml:"user"`
|
User string `toml:"user"`
|
||||||
Pass string `toml:"pass"`
|
Pass string `toml:"pass"`
|
||||||
|
@ -42,6 +43,12 @@ var Config = func() config {
|
||||||
config := config{
|
config := config{
|
||||||
BaseUrl: "https://arimelody.me",
|
BaseUrl: "https://arimelody.me",
|
||||||
Port: 8080,
|
Port: 8080,
|
||||||
|
DB: dbConfig{
|
||||||
|
Host: "127.0.0.1",
|
||||||
|
Port: 5432,
|
||||||
|
User: "arimelody",
|
||||||
|
Name: "arimelody",
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
data, err := os.ReadFile(configFile)
|
data, err := os.ReadFile(configFile)
|
||||||
|
@ -80,6 +87,10 @@ func handleConfigOverrides(config *config) error {
|
||||||
if env, has := os.LookupEnv("ARIMELODY_DATA_DIR"); has { config.DataDirectory = env }
|
if env, has := os.LookupEnv("ARIMELODY_DATA_DIR"); has { config.DataDirectory = env }
|
||||||
|
|
||||||
if env, has := os.LookupEnv("ARIMELODY_DB_HOST"); has { config.DB.Host = env }
|
if env, has := os.LookupEnv("ARIMELODY_DB_HOST"); has { config.DB.Host = env }
|
||||||
|
if env, has := os.LookupEnv("ARIMELODY_DB_PORT"); has {
|
||||||
|
config.DB.Port, err = strconv.ParseInt(env, 10, 0)
|
||||||
|
if err != nil { return errors.New("ARIMELODY_DB_PORT: " + err.Error()) }
|
||||||
|
}
|
||||||
if env, has := os.LookupEnv("ARIMELODY_DB_NAME"); has { config.DB.Name = env }
|
if env, has := os.LookupEnv("ARIMELODY_DB_NAME"); has { config.DB.Name = env }
|
||||||
if env, has := os.LookupEnv("ARIMELODY_DB_USER"); has { config.DB.User = env }
|
if env, has := os.LookupEnv("ARIMELODY_DB_USER"); has { config.DB.User = env }
|
||||||
if env, has := os.LookupEnv("ARIMELODY_DB_PASS"); has { config.DB.Pass = env }
|
if env, has := os.LookupEnv("ARIMELODY_DB_PASS"); has { config.DB.Pass = env }
|
||||||
|
|
11
main.go
11
main.go
|
@ -30,6 +30,10 @@ const DEFAULT_PORT int64 = 8080
|
||||||
func main() {
|
func main() {
|
||||||
fmt.Printf("made with <3 by ari melody\n\n")
|
fmt.Printf("made with <3 by ari melody\n\n")
|
||||||
|
|
||||||
|
// TODO: refactor `global` to `AppState`
|
||||||
|
// this should contain `Config` and `DB`, and be passed through to all
|
||||||
|
// handlers that need it. it's better than weird static globals everywhere!
|
||||||
|
|
||||||
// initialise database connection
|
// initialise database connection
|
||||||
if global.Config.DB.Host == "" {
|
if global.Config.DB.Host == "" {
|
||||||
fmt.Fprintf(os.Stderr, "FATAL: db.host not provided! Exiting...\n")
|
fmt.Fprintf(os.Stderr, "FATAL: db.host not provided! Exiting...\n")
|
||||||
|
@ -52,8 +56,9 @@ func main() {
|
||||||
global.DB, err = sqlx.Connect(
|
global.DB, err = sqlx.Connect(
|
||||||
"postgres",
|
"postgres",
|
||||||
fmt.Sprintf(
|
fmt.Sprintf(
|
||||||
"host=%s user=%s dbname=%s password='%s' sslmode=disable",
|
"host=%s port=%d user=%s dbname=%s password='%s' sslmode=disable",
|
||||||
global.Config.DB.Host,
|
global.Config.DB.Host,
|
||||||
|
global.Config.DB.Port,
|
||||||
global.Config.DB.User,
|
global.Config.DB.User,
|
||||||
global.Config.DB.Name,
|
global.Config.DB.Name,
|
||||||
global.Config.DB.Pass,
|
global.Config.DB.Pass,
|
||||||
|
@ -319,7 +324,7 @@ func main() {
|
||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
fmt.Fprintf(os.Stdout, "No accounts exist! Generated invite code: " + string(invite.Code) + "\nUse this at %s/admin/register.\n", global.Config.BaseUrl)
|
fmt.Printf("No accounts exist! Generated invite code: %s\n", invite.Code)
|
||||||
}
|
}
|
||||||
|
|
||||||
// delete expired invites
|
// delete expired invites
|
||||||
|
@ -331,7 +336,7 @@ func main() {
|
||||||
|
|
||||||
// start the web server!
|
// start the web server!
|
||||||
mux := createServeMux()
|
mux := createServeMux()
|
||||||
fmt.Printf("Now serving at http://127.0.0.1:%d\n", global.Config.Port)
|
fmt.Printf("Now serving at %s:%d\n", global.Config.BaseUrl, global.Config.Port)
|
||||||
log.Fatal(
|
log.Fatal(
|
||||||
http.ListenAndServe(fmt.Sprintf(":%d", global.Config.Port),
|
http.ListenAndServe(fmt.Sprintf(":%d", global.Config.Port),
|
||||||
global.HTTPLog(global.DefaultHeaders(mux)),
|
global.HTTPLog(global.DefaultHeaders(mux)),
|
||||||
|
|
|
@ -1,10 +1,4 @@
|
||||||
CREATE SCHEMA arimelody;
|
CREATE SCHEMA IF NOT EXISTS arimelody;
|
||||||
|
|
||||||
-- Schema verison
|
|
||||||
CREATE TABLE arimelody.schema_version (
|
|
||||||
version INTEGER PRIMARY KEY,
|
|
||||||
applied_at TIMESTAMP DEFAULT current_timestamp
|
|
||||||
);
|
|
||||||
|
|
||||||
--
|
--
|
||||||
-- Tables
|
-- Tables
|
||||||
|
|
Loading…
Reference in a new issue