From: HAOYUatHZ <37070449+HAOYUatHZ@users.noreply.github.com> Date: Wed, 26 Jun 2019 11:04:33 +0000 (+0800) Subject: add address filter (#225) X-Git-Tag: v1.0.5~194 X-Git-Url: http://git.osdn.net/view?p=bytom%2Fvapor.git;a=commitdiff_plain;h=bdeea460d33cb2041c1e04f059431a42e6695de3 add address filter (#225) --- diff --git a/docs/federation/README-en.md b/docs/federation/README-en.md index ff5628f4..0b82b772 100644 --- a/docs/federation/README-en.md +++ b/docs/federation/README-en.md @@ -91,6 +91,7 @@ Optional: + Optional * `String` - *status*, transactions status, which can be `pending` or `completed`. * `String` - *source_chain_name*, transactions source chain, which can be `bytom` or `vapor`. + * `String` - *address*, filter cross-chain requests by address. The address can be either a mainchain or a sidechain one. Note that other requests in such a transaction will also be filtered. * `String` - *source_tx_hash*, souce transaction hash string. * `String` - *dest_tx_hash*, destination transaction hash string. - `Object` - *sort*, transactions sorter. diff --git a/federation/api/handler.go b/federation/api/handler.go index 01c9c0d8..feca2fef 100644 --- a/federation/api/handler.go +++ b/federation/api/handler.go @@ -41,6 +41,14 @@ func (s *Server) ListCrosschainTxs(c *gin.Context, listTxsReq *listCrosschainTxs if sourceChainName, err := listTxsReq.GetFilterString("source_chain_name"); err == nil && sourceChainName != "" { txQuery = txQuery.Joins("join chains on chains.id = cross_transactions.chain_id").Where("chains.name = ?", sourceChainName) } + + // filter address + if address, err := listTxsReq.GetFilterString("address"); err == nil && address != "" { + txQuery = txQuery.Joins("join cross_transaction_reqs on cross_transaction_reqs.cross_transaction_id = cross_transactions.id"). + Where("cross_transaction_reqs.from_address = ? or cross_transaction_reqs.to_address = ?", address, address) + } + + // sorter order txQuery = txQuery.Order(fmt.Sprintf("cross_transactions.source_block_height %s", listTxsReq.Sorter.Order)) txQuery = txQuery.Order(fmt.Sprintf("cross_transactions.source_tx_index %s", listTxsReq.Sorter.Order)) if err := txQuery.Offset(query.Start).Limit(query.Limit).Find(&ormTxs).Error; err != nil {