OSDN Git Service

doc(federation): add /list-crosschain-txs docs (#222)
[bytom/vapor.git] / federation / api / handler.go
index f4a2515..afd4bfb 100644 (file)
@@ -3,6 +3,7 @@ package api
 import (
        "database/sql"
        "fmt"
+       "strings"
 
        "github.com/gin-gonic/gin"
 
@@ -16,24 +17,29 @@ type listCrosschainTxsReq struct{ Display }
 func (s *Server) ListCrosschainTxs(c *gin.Context, listTxsReq *listCrosschainTxsReq, query *PaginationQuery) ([]*orm.CrossTransaction, error) {
        var ormTxs []*orm.CrossTransaction
        txFilter := &orm.CrossTransaction{}
-       if listPending, err := listTxsReq.GetFilterBoolean("list_pending"); err == nil && listPending {
-               txFilter.Status = common.CrossTxPendingStatus
-       }
-       if listCompleted, err := listTxsReq.GetFilterBoolean("list_completed"); err == nil && listCompleted {
-               txFilter.Status = common.CrossTxCompletedStatus
+
+       // filter tx status
+       if status, err := listTxsReq.GetFilterString("status"); err == nil && status != "" {
+               switch strings.ToLower(status) {
+               case common.CrossTxPendingStatusLabel:
+                       txFilter.Status = common.CrossTxPendingStatus
+               case common.CrossTxCompletedStatusLabel:
+                       txFilter.Status = common.CrossTxCompletedStatus
+               }
        }
+
+       // filter tx hash
        if txHash, err := listTxsReq.GetFilterString("source_tx_hash"); err == nil && txHash != "" {
                txFilter.SourceTxHash = txHash
        }
        if txHash, err := listTxsReq.GetFilterString("dest_tx_hash"); err == nil && txHash != "" {
                txFilter.DestTxHash = sql.NullString{txHash, true}
        }
+
        txQuery := s.db.Preload("Chain").Preload("Reqs").Preload("Reqs.Asset").Where(txFilter)
-       if onlyFromMainchain, err := listTxsReq.GetFilterBoolean("only_from_mainchain"); err == nil && onlyFromMainchain {
-               txQuery = txQuery.Joins("join chains on chains.id = cross_transactions.chain_id").Where("chains.name = ?", common.MainchainName)
-       }
-       if onlyFromSidechain, err := listTxsReq.GetFilterBoolean("only_from_sidechain"); err == nil && onlyFromSidechain {
-               txQuery = txQuery.Joins("join chains on chains.id = cross_transactions.chain_id").Where("chains.name = ?", common.SidechainName)
+       // filter direction
+       if fromChainName, err := listTxsReq.GetFilterString("from_chain"); err == nil && fromChainName != "" {
+               txQuery = txQuery.Joins("join chains on chains.id = cross_transactions.chain_id").Where("chains.name = ?", fromChainName)
        }
        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))