package repository import ( "context" "fmt" "github.com/jackc/pgx/v5" "github.com/jackc/pgx/v5/pgconn" "github.com/jackc/pgx/v5/pgxpool" ) type DBTX interface { Exec(ctx context.Context, sql string, args ...any) (pgconn.CommandTag, error) Query(ctx context.Context, sql string, args ...any) (pgx.Rows, error) QueryRow(ctx context.Context, sql string, args ...interface{}) pgx.Row } type TxManager struct { pool *pgxpool.Pool } func NewTxManager(pool *pgxpool.Pool) *TxManager { return &TxManager{pool: pool} } func (m *TxManager) WithTx(ctx context.Context, fn func(tx pgx.Tx) error) error { tx, err := m.pool.Begin(ctx) if err != nil { return fmt.Errorf("begin tx: %w", err) } defer func() { _ = tx.Rollback(ctx) }() if err := fn(tx); err != nil { return err } return tx.Commit(ctx) } func (m *TxManager) Pool() *pgxpool.Pool { return m.pool }