github.com/fibonacci-chain/fbc@v0.0.0-20231124064014-c7636198c1e9/libs/cosmos-sdk/x/bank/client/rest/query.go (about)

     1  package rest
     2  
     3  import (
     4  	"net/http"
     5  
     6  	"github.com/gorilla/mux"
     7  
     8  	"github.com/fibonacci-chain/fbc/libs/cosmos-sdk/client/context"
     9  	sdk "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types"
    10  	"github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types/rest"
    11  	"github.com/fibonacci-chain/fbc/libs/cosmos-sdk/x/bank/internal/types"
    12  )
    13  
    14  // query accountREST Handler
    15  func QueryBalancesRequestHandlerFn(cliCtx context.CLIContext) http.HandlerFunc {
    16  	return func(w http.ResponseWriter, r *http.Request) {
    17  		w.Header().Set("Content-Type", "application/json")
    18  		vars := mux.Vars(r)
    19  		bech32addr := vars["address"]
    20  
    21  		addr, err := sdk.AccAddressFromBech32(bech32addr)
    22  		if err != nil {
    23  			rest.WriteErrorResponse(w, http.StatusInternalServerError, err.Error())
    24  			return
    25  		}
    26  
    27  		cliCtx, ok := rest.ParseQueryHeightOrReturnBadRequest(w, cliCtx, r)
    28  		if !ok {
    29  			return
    30  		}
    31  
    32  		params := types.NewQueryBalanceParams(addr)
    33  		bz, err := cliCtx.Codec.MarshalJSON(params)
    34  		if err != nil {
    35  			rest.WriteErrorResponse(w, http.StatusBadRequest, err.Error())
    36  			return
    37  		}
    38  
    39  		res, height, err := cliCtx.QueryWithData("custom/bank/balances", bz)
    40  		if err != nil {
    41  			rest.WriteErrorResponse(w, http.StatusInternalServerError, err.Error())
    42  			return
    43  		}
    44  
    45  		cliCtx = cliCtx.WithHeight(height)
    46  
    47  		// the query will return empty if there is no data for this account
    48  		if len(res) == 0 {
    49  			rest.PostProcessResponse(w, cliCtx, sdk.Coins{})
    50  			return
    51  		}
    52  
    53  		rest.PostProcessResponse(w, cliCtx, res)
    54  	}
    55  }