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 }