func SetupDatabase() *sqlx.DB {
driver_name := viper.GetString("DB_DRIVER")
dsn_url := viper.GetString("PG_DSN")
migration_dir := viper.GetString("DB_DIR_MIGRATION")
db, _ := sql.Open(driver_name, dsn_url)
if err := db.Ping(); err != nil {
log.Fatalf("Database connection error: %s", err.Error())
}
if viper.GetString("GO_ENV") == "development" {
migrations := migrate.FileMigrationSource{
Dir: migration_dir,
}
if _, err := migrations.FindMigrations(); err != nil {
log.Fatalf("Find migration database error: %s", err.Error())
}
if _, err := migrate.Exec(db, driver_name, migrations, migrate.Up); err != nil {
log.Fatalf("Execute migration database error: %s", err.Error())
}
}
defer log.Println("Database connection success")
return sqlx.NewDb(db, driver_name)
}