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(¶ms) 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(¶ms) 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(¶ms) 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(¶ms) 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 }