Refactor db code. Add migration support
This commit is contained in:
50
main.go
50
main.go
@@ -2,6 +2,7 @@ package main
|
||||
|
||||
import (
|
||||
"embed"
|
||||
"flag"
|
||||
"fmt"
|
||||
"io/fs"
|
||||
"log/slog"
|
||||
@@ -11,6 +12,10 @@ import (
|
||||
|
||||
"git.clustercockpit.org/moebiusband/go-http-skeleton/internal/handlers"
|
||||
"git.clustercockpit.org/moebiusband/go-http-skeleton/internal/middleware"
|
||||
"git.clustercockpit.org/moebiusband/go-http-skeleton/internal/repository"
|
||||
"github.com/joho/godotenv"
|
||||
|
||||
_ "modernc.org/sqlite"
|
||||
)
|
||||
|
||||
//go:embed web/static/*
|
||||
@@ -42,6 +47,51 @@ func init() {
|
||||
}
|
||||
|
||||
func main() {
|
||||
var flagMigrateDB, flagRevertDB, flagForceDB bool
|
||||
|
||||
flag.BoolVar(&flagMigrateDB, "migrate-db", false, "Migrate database to supported version and exit")
|
||||
flag.BoolVar(&flagRevertDB, "revert-db", false, "Migrate database to previous version and exit")
|
||||
flag.BoolVar(&flagForceDB, "force-db", false, "Force database version, clear dirty flag and exit")
|
||||
|
||||
err := godotenv.Load()
|
||||
if err != nil {
|
||||
slog.Error("Could not parse existing .env file at location './.env'. Application startup failed, exited.\nError: %s\n", "Error", err.Error())
|
||||
}
|
||||
|
||||
dbURL := os.Getenv("DB")
|
||||
if dbURL == "" {
|
||||
dbURL = ""
|
||||
}
|
||||
|
||||
if flagMigrateDB {
|
||||
err := repository.MigrateDB(dbURL)
|
||||
if err != nil {
|
||||
slog.Error("MigrateDB Failed: Could not migrate database at location.", "version", repository.Version, "error", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
slog.Info("MigrateDB Success: Migrated database at location.\n", "version", repository.Version)
|
||||
}
|
||||
|
||||
if flagRevertDB {
|
||||
err := repository.RevertDB(dbURL)
|
||||
if err != nil {
|
||||
slog.Error("RevertDB Failed: Could not revert database at location", "version", (repository.Version - 1), "error", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
slog.Info("RevertDB Success: Reverted database", "version", (repository.Version - 1))
|
||||
}
|
||||
|
||||
if flagForceDB {
|
||||
err := repository.ForceDB(dbURL)
|
||||
if err != nil {
|
||||
slog.Error("ForceDB Failed: Could not force database version", "version", repository.Version, "error", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
slog.Error("ForceDB Success: Forced database version", "version", repository.Version)
|
||||
}
|
||||
|
||||
repository.Connect(dbURL)
|
||||
|
||||
port := os.Getenv("PORT")
|
||||
if port == "" {
|
||||
port = "8080"
|
||||
|
Reference in New Issue
Block a user