package database import ( "database/sql" "fmt" "github.com/golang-migrate/migrate/v4" "github.com/golang-migrate/migrate/v4/database/postgres" _ "github.com/golang-migrate/migrate/v4/source/file" _ "github.com/lib/pq" ) func Connect(databaseURL string) (*sql.DB, error) { db, err := sql.Open("postgres", databaseURL) if err != nil { return nil, fmt.Errorf("open db: %w", err) } if err := db.Ping(); err != nil { return nil, fmt.Errorf("ping db: %w", err) } db.SetMaxOpenConns(25) db.SetMaxIdleConns(5) return db, nil } func RunMigrations(db *sql.DB) error { driver, err := postgres.WithInstance(db, &postgres.Config{}) if err != nil { return fmt.Errorf("migration driver: %w", err) } m, err := migrate.NewWithDatabaseInstance( "file://internal/database/migrations", "postgres", driver, ) if err != nil { return fmt.Errorf("migrate init: %w", err) } if err := m.Up(); err != nil && err != migrate.ErrNoChange { return fmt.Errorf("migrate up: %w", err) } return nil }