aboutsummaryrefslogtreecommitdiffstats
path: root/pkg/database/database.go
diff options
context:
space:
mode:
authorLeonardo Bishop <me@leonardobishop.com>2025-01-17 13:21:24 +0000
committerLeonardo Bishop <me@leonardobishop.com>2025-01-17 13:21:24 +0000
commitc00b690bd6f600554a1404e692bd9e4373325d27 (patch)
tree4488b625e1c24af52fced6f60ac1b3ddff1383bc /pkg/database/database.go
Initial commit
Diffstat (limited to 'pkg/database/database.go')
-rw-r--r--pkg/database/database.go45
1 files changed, 45 insertions, 0 deletions
diff --git a/pkg/database/database.go b/pkg/database/database.go
new file mode 100644
index 0000000..5570c95
--- /dev/null
+++ b/pkg/database/database.go
@@ -0,0 +1,45 @@
+package database
+
+import (
+ "context"
+ "embed"
+ "fmt"
+
+ "github.com/jackc/pgx/v5/pgxpool"
+ "github.com/jackc/pgx/v5/stdlib"
+ "github.com/pressly/goose/v3"
+)
+
+//go:embed migrations/*.sql
+var embedMigrations embed.FS
+
+func Connect(connString string) (*pgxpool.Pool, error) {
+ ctx := context.Background()
+
+ config, err := pgxpool.ParseConfig(connString)
+ if err != nil {
+ return nil, err
+ }
+
+ pool, err := pgxpool.NewWithConfig(ctx, config)
+ if err != nil {
+ return nil, err
+ }
+
+ return pool, nil
+}
+
+func Migrate(pool *pgxpool.Pool) error {
+ goose.SetBaseFS(embedMigrations)
+
+ if err := goose.SetDialect("postgres"); err != nil {
+ return fmt.Errorf("could not set dialect: %w", err)
+ }
+
+ db := stdlib.OpenDBFromPool(pool)
+ if err := goose.Up(db, "migrations"); err != nil {
+ return fmt.Errorf("could not apply migrations: %w", err)
+ }
+
+ return nil
+}