From af4b0190d0730d9f29e959e8609341bf97f389cf Mon Sep 17 00:00:00 2001 From: Michael Thomson Date: Thu, 15 May 2025 16:01:07 -0400 Subject: [PATCH] add uuid support --- cmd/main.go | 18 +++++++++++++++--- go.mod | 2 ++ go.sum | 6 ++++++ internal/test/test_database.go | 14 +++++++++++++- 4 files changed, 36 insertions(+), 4 deletions(-) diff --git a/cmd/main.go b/cmd/main.go index 7c5971b..4875051 100644 --- a/cmd/main.go +++ b/cmd/main.go @@ -12,7 +12,9 @@ import ( todohandler "gitea.michaelthomson.dev/mthomson/habits/internal/todo/handler" todorepository "gitea.michaelthomson.dev/mthomson/habits/internal/todo/repository" todoservice "gitea.michaelthomson.dev/mthomson/habits/internal/todo/service" + "github.com/jackc/pgx/v5" "github.com/jackc/pgx/v5/pgxpool" + pgxuuid "github.com/jackc/pgx-gofrs-uuid" ) func main() { @@ -30,11 +32,21 @@ func main() { // create db pool postgresUrl := "postgres://todo:password@localhost:5432/todo" - // db, err := sql.Open("pgx", postgresUrl) - db, err := pgxpool.New(context.Background(), postgresUrl) + dbconfig, err := pgxpool.ParseConfig(postgresUrl) if err != nil { logger.Error(err.Error()) - os.Exit(1); + os.Exit(1) + } + + dbconfig.AfterConnect = func(ctx context.Context, conn *pgx.Conn) error { + pgxuuid.Register(conn.TypeMap()) + return nil + } + + db, err := pgxpool.NewWithConfig(context.Background(), dbconfig) + if err != nil { + logger.Error(err.Error()) + os.Exit(1) } // run migrations diff --git a/go.mod b/go.mod index bdc4763..55b71aa 100644 --- a/go.mod +++ b/go.mod @@ -6,6 +6,7 @@ toolchain go1.23.9 require ( github.com/google/uuid v1.6.0 + github.com/jackc/pgx-gofrs-uuid v0.0.0-20230224015001-1d428863c2e2 github.com/jackc/pgx/v5 v5.7.4 github.com/testcontainers/testcontainers-go v0.37.0 github.com/testcontainers/testcontainers-go/modules/postgres v0.37.0 @@ -29,6 +30,7 @@ require ( github.com/go-logr/logr v1.4.2 // indirect github.com/go-logr/stdr v1.2.2 // indirect github.com/go-ole/go-ole v1.3.0 // indirect + github.com/gofrs/uuid/v5 v5.3.2 // indirect github.com/gogo/protobuf v1.3.2 // indirect github.com/grpc-ecosystem/grpc-gateway/v2 v2.16.0 // indirect github.com/jackc/pgpassfile v1.0.0 // indirect diff --git a/go.sum b/go.sum index 487f119..0d6908a 100644 --- a/go.sum +++ b/go.sum @@ -39,6 +39,10 @@ github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= github.com/go-ole/go-ole v1.3.0 h1:Dt6ye7+vXGIKZ7Xtk4s6/xVdGDQynvom7xCFEdWr6uE= github.com/go-ole/go-ole v1.3.0/go.mod h1:5LS6F96DhAwUc7C+1HLexzMXY1xGRSryjyPPKW6zv78= +github.com/gofrs/uuid/v5 v5.0.0 h1:p544++a97kEL+svbcFbCQVM9KFu0Yo25UoISXGNNH9M= +github.com/gofrs/uuid/v5 v5.0.0/go.mod h1:CDOjlDMVAtN56jqyRUZh58JT31Tiw7/oQyEXZV+9bD8= +github.com/gofrs/uuid/v5 v5.3.2 h1:2jfO8j3XgSwlz/wHqemAEugfnTlikAYHhnqQ8Xh4fE0= +github.com/gofrs/uuid/v5 v5.3.2/go.mod h1:CDOjlDMVAtN56jqyRUZh58JT31Tiw7/oQyEXZV+9bD8= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= @@ -51,6 +55,8 @@ github.com/jackc/pgpassfile v1.0.0 h1:/6Hmqy13Ss2zCq62VdNG8tM1wchn8zjSGOBJ6icpsI github.com/jackc/pgpassfile v1.0.0/go.mod h1:CEx0iS5ambNFdcRtxPj5JhEz+xB6uRky5eyVu/W2HEg= github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761 h1:iCEnooe7UlwOQYpKFhBabPMi4aNAfoODPEFNiAnClxo= github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761/go.mod h1:5TJZWKEWniPve33vlWYSoGYefn3gLQRzjfDlhSJ9ZKM= +github.com/jackc/pgx-gofrs-uuid v0.0.0-20230224015001-1d428863c2e2 h1:QWdhlQz98hUe1xmjADOl2mr8ERLrOqj0KWLdkrnNsRQ= +github.com/jackc/pgx-gofrs-uuid v0.0.0-20230224015001-1d428863c2e2/go.mod h1:Ti7pyNDU/UpXKmBTeFgxTvzYDM9xHLiYKMsLdt4b9cg= github.com/jackc/pgx/v5 v5.7.4 h1:9wKznZrhWa2QiHL+NjTSPP6yjl3451BX3imWDnokYlg= github.com/jackc/pgx/v5 v5.7.4/go.mod h1:ncY89UGWxg82EykZUwSpUKEfccBGGYq1xjrOpsbsfGQ= github.com/jackc/puddle/v2 v2.2.2 h1:PR8nw+E/1w0GLuRFSmiioY6UooMp6KJv0/61nB7icHo= diff --git a/internal/test/test_database.go b/internal/test/test_database.go index 4496b5e..126e9d2 100644 --- a/internal/test/test_database.go +++ b/internal/test/test_database.go @@ -7,10 +7,12 @@ import ( "time" "gitea.michaelthomson.dev/mthomson/habits/internal/migrate" + "github.com/jackc/pgx/v5" "github.com/jackc/pgx/v5/pgxpool" "github.com/testcontainers/testcontainers-go" "github.com/testcontainers/testcontainers-go/modules/postgres" "github.com/testcontainers/testcontainers-go/wait" + pgxuuid "github.com/jackc/pgx-gofrs-uuid" ) type TestDatabase struct { @@ -42,8 +44,18 @@ func NewTestDatabase(tb testing.TB) *TestDatabase { tb.Fatalf("Failed to get connection string: %v", err) } + dbconfig, err := pgxpool.ParseConfig(connectionString) + if err != nil { + tb.Fatalf("Failed to create db config: %v", err) + } + + dbconfig.AfterConnect = func(ctx context.Context, conn *pgx.Conn) error { + pgxuuid.Register(conn.TypeMap()) + return nil + } + // create db pool - db, err := pgxpool.New(context.Background(), connectionString) + db, err := pgxpool.NewWithConfig(context.Background(), dbconfig) if err != nil { tb.Fatalf("Failed to open db pool: %v", err) }