package database import ( "context" "database/sql" "fmt" "time" _ "github.com/lib/pq" ) type Config struct { MaxOpenConns int MaxIdleConns int ConnMaxLifetime time.Duration ConnMaxIdleTime time.Duration } func NewPostgresConnection(connStr string, cfg Config) (*sql.DB, error) { db, err := sql.Open("postgres", connStr) if err != nil { return nil, fmt.Errorf("failed to open database connection: %w", err) } db.SetMaxOpenConns(cfg.MaxOpenConns) db.SetMaxIdleConns(cfg.MaxIdleConns) db.SetConnMaxLifetime(cfg.ConnMaxLifetime) db.SetConnMaxIdleTime(cfg.ConnMaxIdleTime) err = db.PingContext(context.Background()) if err != nil { return nil, fmt.Errorf("failed to ping database: %w", err) } return db, nil }