diff --git a/db/postgres.go b/db/postgres.go index 38bbe04..e53b4b7 100644 --- a/db/postgres.go +++ b/db/postgres.go @@ -5,7 +5,6 @@ import ( "fmt" "github.com/jmoiron/sqlx" "log" - "os" "gitea.deepak.science/deepak/gogmagog/config" "gitea.deepak.science/deepak/gogmagog/models" @@ -23,11 +22,10 @@ type postgresStore struct { } // GetStore provides a store to back the model based on a postgres connection. -func GetStore(dbConf *config.DBConfig) models.Store { +func GetStore(dbConf *config.DBConfig) (models.Store, error) { if dbConf.Type != "postgres" { - log.Fatalf("Unsupported database type: " + dbConf.Type) - os.Exit(1) + return nil, fmt.Errorf("Unsupported database type: %v", dbConf.Type) } connStr := fmt.Sprintf("user=%s password=%s host=%s port=%s database=%s sslmode=disable", @@ -40,28 +38,33 @@ func GetStore(dbConf *config.DBConfig) models.Store { tmp, err := sql.Open("pgx", connStr) if err != nil { log.Fatal("Could not connect to database: \n", err) - os.Exit(1) + return nil, err } db := sqlx.NewDb(tmp, "pgx") if err := db.Ping(); err != nil { log.Fatal("database ping failed\n", err) - os.Exit(1) + return nil, err } driver, err := postgres.WithInstance(tmp, &postgres.Config{}) if err != nil { log.Fatal("Could not create driver for db migration", err) - os.Exit(1) + return nil, err } m, err := migrate.NewWithDatabaseInstance("file://db/migrations", "postgres", driver) if err != nil { log.Fatal("Could not perform migration", err) - os.Exit(1) + return nil, err } - if err := m.Up(); err != nil && err != migrate.ErrNoChange { - log.Fatalf("An error occurred while syncing the database.. %v", err) + if err := m.Up(); err != nil { + if err == migrate.ErrNoChange { + log.Print("No migration needed.") + } else { + log.Fatalf("An error occurred while syncing the database.. %v", err) + return nil, err + } } db.MapperFunc(util.ToSnake) - return &postgresStore{db: db} + return &postgresStore{db: db}, nil } func (store *postgresStore) SelectActions() ([]*models.Action, error) { diff --git a/main.go b/main.go index babfaa5..7ae06a0 100644 --- a/main.go +++ b/main.go @@ -24,7 +24,11 @@ func main() { log.Print("App environment is " + env) // DB - store := db.GetStore(&conf.Db) + store, err := db.GetStore(&conf.Db) + if err != nil { + log.Fatal("Could not get store", err) + os.Exit(1) + } if store != nil { log.Print("Got DB connection")