package main import ( "arbeitszeitmessung/helper" "arbeitszeitmessung/models" "database/sql" "fmt" "log/slog" "github.com/golang-migrate/migrate/v4" "github.com/golang-migrate/migrate/v4/database/postgres" _ "github.com/golang-migrate/migrate/v4/database/postgres" _ "github.com/golang-migrate/migrate/v4/source/file" _ "github.com/lib/pq" ) func OpenDatabase() (models.IDatabase, error) { dbHost := helper.GetEnv("POSTGRES_HOST", "localhost") dbName := helper.GetEnv("POSTGRES_DB", "arbeitszeitmessung") dbUser := helper.GetEnv("POSTGRES_API_USER", "api_nutzer") dbPassword := helper.GetEnv("POSTGRES_API_PASS", "password") dbTz := helper.GetEnv("TZ", "Europe/Berlin") connStr := fmt.Sprintf( "host=%s user=%s dbname=%s password=%s sslmode=disable TimeZone=%s", dbHost, dbUser, dbName, dbPassword, dbTz) return sql.Open("postgres", connStr) } func Migrate() error { dbHost := helper.GetEnv("POSTGRES_HOST", "localhost") dbName := helper.GetEnv("POSTGRES_DB", "arbeitszeitmessung") dbPassword := helper.GetEnv("POSTGRES_PASSWORD", "password") dbTz := helper.GetEnv("TZ", "Europe/Berlin") connStr := fmt.Sprintf( "host=%s user=%s dbname=%s password=%s sslmode=disable TimeZone=%s", dbHost, "migrate", dbName, dbPassword, dbTz) db, err := sql.Open("postgres", connStr) if err != nil { return err } driver, err := postgres.WithInstance(db, &postgres.Config{}) if err != nil { return err } m, err := migrate.NewWithDatabaseInstance("file:///app/migrations", "postgres", driver) if err != nil { return err } slog.Info("Connected to database. Running migrations now.") // Migrate all the way up ... if err := m.Up(); err != nil && err != migrate.ErrNoChange { return err } slog.Info("Finished migrations starting webserver.") return nil }