package repository import ( "context" "github.com/jackc/pgx/v5" "github.com/jackc/pgx/v5/pgconn" "github.com/jackc/pgx/v5/pgxpool" ) // Querier defines an interface for executing queries, which can be a pgxpool.Pool or a pgx.Tx. type Querier interface { Exec(ctx context.Context, sql string, arguments ...interface{}) (pgconn.CommandTag, error) Query(ctx context.Context, sql string, args ...interface{}) (pgx.Rows, error) QueryRow(ctx context.Context, sql string, args ...interface{}) pgx.Row } // getQuerier retrieves a transaction from the context if it exists, otherwise returns the pool. // The transaction is expected to be stored in the context with the key "tx". func getQuerier(ctx context.Context, db *pgxpool.Pool) Querier { if tx, ok := ctx.Value("tx").(pgx.Tx); ok { return tx } return db }