Moved os dependence to main.go and had db code return error

This commit is contained in:
Deepak Mallubhotla 2020-12-29 10:39:42 -06:00
parent 52646fbfb7
commit 506e7f64b6
Signed by: deepak
GPG Key ID: 64BF53A3369104E7
2 changed files with 19 additions and 12 deletions

View File

@ -5,7 +5,6 @@ import (
"fmt" "fmt"
"github.com/jmoiron/sqlx" "github.com/jmoiron/sqlx"
"log" "log"
"os"
"gitea.deepak.science/deepak/gogmagog/config" "gitea.deepak.science/deepak/gogmagog/config"
"gitea.deepak.science/deepak/gogmagog/models" "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. // 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" { if dbConf.Type != "postgres" {
log.Fatalf("Unsupported database type: " + dbConf.Type) return nil, fmt.Errorf("Unsupported database type: %v", dbConf.Type)
os.Exit(1)
} }
connStr := fmt.Sprintf("user=%s password=%s host=%s port=%s database=%s sslmode=disable", 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) tmp, err := sql.Open("pgx", connStr)
if err != nil { if err != nil {
log.Fatal("Could not connect to database: \n", err) log.Fatal("Could not connect to database: \n", err)
os.Exit(1) return nil, err
} }
db := sqlx.NewDb(tmp, "pgx") db := sqlx.NewDb(tmp, "pgx")
if err := db.Ping(); err != nil { if err := db.Ping(); err != nil {
log.Fatal("database ping failed\n", err) log.Fatal("database ping failed\n", err)
os.Exit(1) return nil, err
} }
driver, err := postgres.WithInstance(tmp, &postgres.Config{}) driver, err := postgres.WithInstance(tmp, &postgres.Config{})
if err != nil { if err != nil {
log.Fatal("Could not create driver for db migration", err) 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) m, err := migrate.NewWithDatabaseInstance("file://db/migrations", "postgres", driver)
if err != nil { if err != nil {
log.Fatal("Could not perform migration", err) log.Fatal("Could not perform migration", err)
os.Exit(1) return nil, err
} }
if err := m.Up(); err != nil && err != migrate.ErrNoChange { if err := m.Up(); err != nil {
log.Fatalf("An error occurred while syncing the database.. %v", err) 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) db.MapperFunc(util.ToSnake)
return &postgresStore{db: db} return &postgresStore{db: db}, nil
} }
func (store *postgresStore) SelectActions() ([]*models.Action, error) { func (store *postgresStore) SelectActions() ([]*models.Action, error) {

View File

@ -24,7 +24,11 @@ func main() {
log.Print("App environment is " + env) log.Print("App environment is " + env)
// DB // 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 { if store != nil {
log.Print("Got DB connection") log.Print("Got DB connection")