github.com/joao-fontenele/go-url-shortener@v1.3.4/pkg/postgres/db.go (about) 1 package postgres 2 3 import ( 4 "context" 5 "fmt" 6 7 "github.com/jackc/pgx/v4/log/zapadapter" 8 "github.com/jackc/pgx/v4/pgxpool" 9 "github.com/joao-fontenele/go-url-shortener/pkg/configger" 10 "github.com/joao-fontenele/go-url-shortener/pkg/logger" 11 "go.uber.org/zap" 12 ) 13 14 var conn *pgxpool.Pool 15 16 // Connect creates a connection to postgres db 17 func Connect() (func(), error) { 18 var err error 19 logger := logger.Get() 20 dbConf := configger.Get().Database 21 22 var connectURL string 23 if dbConf.ConnectURL != "" { 24 connectURL = fmt.Sprintf("%s?sslmode=%s", dbConf.ConnectURL, dbConf.SSLMode) 25 } else { 26 connectURL = fmt.Sprintf( 27 "postgresql://%s:%s@%s:%s/%s?sslmode=%s", 28 dbConf.User, 29 dbConf.Pass, 30 dbConf.Host, 31 dbConf.Port, 32 dbConf.Name, 33 dbConf.SSLMode, 34 ) 35 } 36 37 poolConfig, err := pgxpool.ParseConfig(connectURL) 38 if err != nil { 39 logger.Fatal("failed to parse dburl", zap.String("dbUrl", connectURL), zap.Error(err)) 40 } 41 poolConfig.ConnConfig.Logger = zapadapter.NewLogger(logger) 42 43 conn, err = pgxpool.ConnectConfig(context.Background(), poolConfig) 44 45 if err != nil { 46 return nil, err 47 } 48 49 return conn.Close, nil 50 } 51 52 // GetConnection returns a previously created connection pool 53 func GetConnection() *pgxpool.Pool { 54 return conn 55 }