package database import ( "context" "fmt" "github.com/jackc/pgx/v5/pgxpool" ) type DB struct { Pool *pgxpool.Pool } func New(dsn string) (*DB, error) { pool, err := pgxpool.New(context.Background(), dsn) if err != nil { return nil, fmt.Errorf("connect to postgres: %w", err) } if err := pool.Ping(context.Background()); err != nil { pool.Close() return nil, fmt.Errorf("ping postgres: %w", err) } db := &DB{Pool: pool} if err := db.migrate(); err != nil { pool.Close() return nil, fmt.Errorf("run migrations: %w", err) } return db, nil } func (db *DB) Close() { db.Pool.Close() } func (db *DB) Healthy(ctx context.Context) bool { return db.Pool.Ping(ctx) == nil }