package database import ( "context" "fmt" "log/slog" "net/url" "github.com/jackc/pgx/v5/pgxpool" _ "github.com/lib/pq" "github.com/spf13/viper" ) var pool *pgxpool.Pool func Connect() (*pgxpool.Pool, error) { if pool != nil { return pool, nil } dburl := url.URL{ Scheme: "postgres", User: url.UserPassword(viper.GetString("db.user"), viper.GetString("db.password")), Host: fmt.Sprintf("%s:%d", viper.GetString("db.host"), viper.GetInt("db.port")), Path: fmt.Sprintf("/%s", viper.GetString("db.database")), } conn, err := pgxpool.New(context.Background(), dburl.String()) if err != nil { slog.Error("Could not connect to DB", "url", dburl.Redacted(), "error", err) return nil, err } pool = conn return conn, nil } func Ping() error { err := pool.Ping(context.Background()) if err != nil { slog.Error("Error connecting to DB", "error", err) return err } else { slog.Info("DB: Pong") return nil } }