github.com/fibonacci-chain/fbc@v0.0.0-20231124064014-c7636198c1e9/x/dex/client/rest/rest.go (about)

     1  package rest
     2  
     3  import (
     4  	"encoding/json"
     5  	"fmt"
     6  	"net/http"
     7  	"strings"
     8  
     9  	"github.com/fibonacci-chain/fbc/x/dex/types"
    10  
    11  	sdk "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types"
    12  	"github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types/rest"
    13  	"github.com/fibonacci-chain/fbc/x/common"
    14  	govRest "github.com/fibonacci-chain/fbc/x/gov/client/rest"
    15  
    16  	"github.com/fibonacci-chain/fbc/libs/cosmos-sdk/client/context"
    17  	"github.com/gorilla/mux"
    18  )
    19  
    20  // RegisterRoutes - Central function to define routes that get registered by the main application
    21  func RegisterRoutes(cliCtx context.CLIContext, r *mux.Router) {
    22  	r.HandleFunc("/products", productsHandler(cliCtx)).Methods("GET")
    23  	r.HandleFunc("/dex/deposits", depositsHandler(cliCtx)).Methods("GET")
    24  	r.HandleFunc("/dex/product_rank", matchOrderHandler(cliCtx)).Methods("GET")
    25  	r.HandleFunc("/dexoperator/{address}", operatorHandler(cliCtx)).Methods("GET")
    26  	r.HandleFunc("/dexoperators", operatorsHandler(cliCtx)).Methods("GET")
    27  }
    28  
    29  func productsHandler(cliContext context.CLIContext) func(http.ResponseWriter, *http.Request) {
    30  	return func(w http.ResponseWriter, r *http.Request) {
    31  		ownerAddress := r.URL.Query().Get("address")
    32  		pageStr := r.URL.Query().Get("page")
    33  		perPageStr := r.URL.Query().Get("per_page")
    34  
    35  		page, perPage, err := common.Paginate(pageStr, perPageStr)
    36  		if err != nil {
    37  			common.HandleErrorMsg(w, cliContext, common.CodeInvalidPaginateParam, err.Error())
    38  			return
    39  		}
    40  		params := types.NewQueryDexInfoParams(ownerAddress, page, perPage)
    41  		bz, err := cliContext.Codec.MarshalJSON(&params)
    42  
    43  		if err != nil {
    44  			common.HandleErrorMsg(w, cliContext, common.CodeMarshalJSONFailed, err.Error())
    45  			return
    46  		}
    47  
    48  		res, _, err := cliContext.QueryWithData(fmt.Sprintf("custom/%s/%s", types.QuerierRoute, types.QueryProducts), bz)
    49  		if err != nil {
    50  			sdkErr := common.ParseSDKError(err.Error())
    51  			common.HandleErrorMsg(w, cliContext, sdkErr.Code, sdkErr.Message)
    52  			return
    53  		}
    54  
    55  		rest.PostProcessResponse(w, cliContext, res)
    56  	}
    57  
    58  }
    59  
    60  func depositsHandler(cliContext context.CLIContext) func(http.ResponseWriter, *http.Request) {
    61  	return func(w http.ResponseWriter, r *http.Request) {
    62  
    63  		address := r.URL.Query().Get("address")
    64  		baseAsset := r.URL.Query().Get("base_asset")
    65  		quoteAsset := r.URL.Query().Get("quote_asset")
    66  		pageStr := r.URL.Query().Get("page")
    67  		perPageStr := r.URL.Query().Get("per_page")
    68  		if address == "" && baseAsset == "" && quoteAsset == "" {
    69  			common.HandleErrorMsg(w, cliContext, types.CodeAddrAndProductAllRequired, "bad request: address、base_asset and quote_asset could not be empty at the same time")
    70  			return
    71  		}
    72  		page, perPage, err := common.Paginate(pageStr, perPageStr)
    73  		if err != nil {
    74  			common.HandleErrorMsg(w, cliContext, common.CodeInvalidPaginateParam, err.Error())
    75  			return
    76  		}
    77  
    78  		params := types.NewQueryDepositParams(address, baseAsset, quoteAsset, page, perPage)
    79  		bz, err := cliContext.Codec.MarshalJSON(&params)
    80  		if err != nil {
    81  			common.HandleErrorMsg(w, cliContext, common.CodeMarshalJSONFailed, err.Error())
    82  			return
    83  		}
    84  
    85  		res, _, err := cliContext.QueryWithData(fmt.Sprintf("custom/%s/%s", types.QuerierRoute, types.QueryDeposits), bz)
    86  		if err != nil {
    87  			sdkErr := common.ParseSDKError(err.Error())
    88  			common.HandleErrorMsg(w, cliContext, sdkErr.Code, sdkErr.Message)
    89  			return
    90  		}
    91  
    92  		rest.PostProcessResponse(w, cliContext, res)
    93  	}
    94  
    95  }
    96  
    97  func matchOrderHandler(cliContext context.CLIContext) func(http.ResponseWriter, *http.Request) {
    98  	return func(w http.ResponseWriter, r *http.Request) {
    99  		pageStr := r.URL.Query().Get("page")
   100  		perPageStr := r.URL.Query().Get("per_page")
   101  
   102  		page, perPage, err := common.Paginate(pageStr, perPageStr)
   103  		if err != nil {
   104  			common.HandleErrorMsg(w, cliContext, common.CodeInvalidPaginateParam, err.Error())
   105  			return
   106  		}
   107  
   108  		params := types.NewQueryDexInfoParams("", page, perPage)
   109  		bz, err := cliContext.Codec.MarshalJSON(&params)
   110  
   111  		if err != nil {
   112  			common.HandleErrorMsg(w, cliContext, common.CodeMarshalJSONFailed, err.Error())
   113  			return
   114  		}
   115  
   116  		res, _, err := cliContext.QueryWithData(fmt.Sprintf("custom/%s/%s", types.QuerierRoute, types.QueryMatchOrder), bz)
   117  		if err != nil {
   118  			sdkErr := common.ParseSDKError(err.Error())
   119  			common.HandleErrorMsg(w, cliContext, sdkErr.Code, sdkErr.Message)
   120  			return
   121  		}
   122  
   123  		result := common.GetBaseResponse("hello")
   124  		result2, err2 := json.Marshal(result)
   125  		if err2 != nil {
   126  			common.HandleErrorMsg(w, cliContext, common.CodeMarshalJSONFailed, err2.Error())
   127  			return
   128  		}
   129  		result2 = []byte(strings.Replace(string(result2), "\"hello\"", string(res), 1))
   130  		rest.PostProcessResponse(w, cliContext, result2)
   131  	}
   132  
   133  }
   134  
   135  func operatorHandler(cliContext context.CLIContext) func(http.ResponseWriter, *http.Request) {
   136  	return func(w http.ResponseWriter, r *http.Request) {
   137  
   138  		vars := mux.Vars(r)
   139  		address, err := sdk.AccAddressFromBech32(vars["address"])
   140  		if err != nil {
   141  			common.HandleErrorMsg(w, cliContext, common.CodeCreateAddrFromBech32Failed, err.Error())
   142  			return
   143  		}
   144  
   145  		params := types.QueryDexOperatorParams{}
   146  		params.Addr = address
   147  		bz := cliContext.Codec.MustMarshalJSON(&params)
   148  		res, _, err := cliContext.QueryWithData(fmt.Sprintf("custom/%s/%s", types.QuerierRoute, types.QueryOperator), bz)
   149  		if err != nil {
   150  			sdkErr := common.ParseSDKError(err.Error())
   151  			common.HandleErrorMsg(w, cliContext, sdkErr.Code, sdkErr.Message)
   152  			return
   153  		}
   154  
   155  		result := common.GetBaseResponse("hello")
   156  		result2, err2 := json.Marshal(result)
   157  		if err2 != nil {
   158  			common.HandleErrorMsg(w, cliContext, common.CodeMarshalJSONFailed, err2.Error())
   159  			return
   160  		}
   161  		result2 = []byte(strings.Replace(string(result2), "\"hello\"", string(res), 1))
   162  		rest.PostProcessResponse(w, cliContext, result2)
   163  	}
   164  }
   165  
   166  func operatorsHandler(cliContext context.CLIContext) func(http.ResponseWriter, *http.Request) {
   167  	return func(w http.ResponseWriter, r *http.Request) {
   168  		res, _, err := cliContext.Query(fmt.Sprintf("custom/%s/%s", types.QuerierRoute, types.QueryOperators))
   169  		if err != nil {
   170  			sdkErr := common.ParseSDKError(err.Error())
   171  			common.HandleErrorMsg(w, cliContext, sdkErr.Code, sdkErr.Message)
   172  			return
   173  		}
   174  
   175  		result := common.GetBaseResponse("hello")
   176  		result2, err2 := json.Marshal(result)
   177  		if err2 != nil {
   178  			common.HandleErrorMsg(w, cliContext, common.CodeMarshalJSONFailed, err2.Error())
   179  			return
   180  		}
   181  		result2 = []byte(strings.Replace(string(result2), "\"hello\"", string(res), 1))
   182  		rest.PostProcessResponse(w, cliContext, result2)
   183  
   184  	}
   185  }
   186  
   187  // DelistProposalRESTHandler defines dex proposal handler
   188  func DelistProposalRESTHandler(context.CLIContext) govRest.ProposalRESTHandler {
   189  	return govRest.ProposalRESTHandler{}
   190  }