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  }