From 5e23e20e5a449b8c874782c7052d97e0f012e9e7 Mon Sep 17 00:00:00 2001 From: Kylesoda <249518290+kylesoda@users.noreply.github.com> Date: Mon, 30 Mar 2026 11:44:27 -0500 Subject: [PATCH] refactor: extract connection to database logic to db module --- cmd/main.go | 29 ++++++++++------------------- internal/db/connection.go | 28 ++++++++++++++++++++++++++++ 2 files changed, 38 insertions(+), 19 deletions(-) create mode 100644 internal/db/connection.go diff --git a/cmd/main.go b/cmd/main.go index 95cde64..9b0e9d3 100644 --- a/cmd/main.go +++ b/cmd/main.go @@ -7,31 +7,22 @@ import ( "os" "git.ksdemosapps.com/kylesoda/pgx-learning/internal/config" + "git.ksdemosapps.com/kylesoda/pgx-learning/internal/db" "git.ksdemosapps.com/kylesoda/pgx-learning/internal/db/postgres" "git.ksdemosapps.com/kylesoda/pgx-learning/internal/models" "git.ksdemosapps.com/kylesoda/pgx-learning/internal/repository" - "github.com/jackc/pgx/v5/pgxpool" "github.com/urfave/cli/v2" ) -var pool *pgxpool.Pool -var ctx = context.Background() - -func init() { - var err error - pool, err = pgxpool.New(ctx, config.Db.Url) - if err != nil { - log.Fatal("Unable to connect to database:", err) - } - - if err := pool.Ping(ctx); err != nil { - log.Fatal("Unable to ping database:", err) - } - - // fmt.Println("Connected to PostgreSQL database!") -} - func main() { + ctx := context.Background() + + pool, err := db.Connect(ctx, config.Db.Url) + if err != nil { + log.Fatal(err) + } + defer db.Close(pool) + taskRespository := postgres.NewTaskRepository(pool) app := &cli.App{ @@ -175,7 +166,7 @@ func main() { }, } - err := app.Run(os.Args) + err = app.Run(os.Args) if err != nil { log.Fatal(err) } diff --git a/internal/db/connection.go b/internal/db/connection.go new file mode 100644 index 0000000..d675916 --- /dev/null +++ b/internal/db/connection.go @@ -0,0 +1,28 @@ +package db + +import ( + "context" + "fmt" + + "github.com/jackc/pgx/v5/pgxpool" +) + +func Connect(ctx context.Context, dbURL string) (*pgxpool.Pool, error) { + pool, err := pgxpool.New(ctx, dbURL) + if err != nil { + return nil, fmt.Errorf("unable to connect to database: %w", err) + } + + if err := pool.Ping(ctx); err != nil { + pool.Close() + return nil, fmt.Errorf("unable to ping database: %w", err) + } + + return pool, nil +} + +func Close(pool *pgxpool.Pool) { + if pool != nil { + pool.Close() + } +}