package postgres import ( "context" "fmt" "github.com/jackc/pgx/v5" "github.com/jackc/pgx/v5/pgxpool" ) type Store struct { pool *pgxpool.Pool } type Tx = pgx.Tx func Open(ctx context.Context, databaseURL string) (*pgxpool.Pool, error) { pool, err := pgxpool.New(ctx, databaseURL) if err != nil { return nil, fmt.Errorf("open postgres pool: %w", err) } if err := pool.Ping(ctx); err != nil { pool.Close() return nil, fmt.Errorf("ping postgres: %w", err) } return pool, nil } func NewStore(pool *pgxpool.Pool) *Store { return &Store{pool: pool} } func (s *Store) Pool() *pgxpool.Pool { return s.pool } func (s *Store) Close() { if s.pool != nil { s.pool.Close() } } func (s *Store) Begin(ctx context.Context) (pgx.Tx, error) { return s.pool.Begin(ctx) }