github.com/fibonacci-chain/fbc@v0.0.0-20231124064014-c7636198c1e9/x/token/client/rest/rest.go (about) 1 package rest 2 3 import ( 4 "fmt" 5 "net/http" 6 7 "github.com/fibonacci-chain/fbc/x/token/types" 8 9 "encoding/json" 10 "strings" 11 12 "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/client/context" 13 "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types/rest" 14 "github.com/fibonacci-chain/fbc/x/common" 15 "github.com/gorilla/mux" 16 ) 17 18 // RegisterRoutes, a central function to define routes 19 // which is called by the rest module in main application 20 func RegisterRoutes(cliCtx context.CLIContext, r *mux.Router, storeName string) { 21 r.HandleFunc(fmt.Sprintf("/token/{symbol}"), tokenHandler(cliCtx, storeName)).Methods("GET") 22 r.HandleFunc(fmt.Sprintf("/tokens"), tokensHandler(cliCtx, storeName)).Methods("GET") 23 r.HandleFunc(fmt.Sprintf("/currency/describe"), currencyDescribeHandler(cliCtx, storeName)).Methods("GET") 24 r.HandleFunc(fmt.Sprintf("/accounts/{address}"), spotAccountsHandler(cliCtx, storeName)).Methods("GET") 25 r.HandleFunc(fmt.Sprintf("/upload"), uploadAccountsHandler(cliCtx, storeName)).Methods("GET") 26 } 27 28 func tokenHandler(cliCtx context.CLIContext, storeName string) http.HandlerFunc { 29 return func(w http.ResponseWriter, r *http.Request) { 30 vars := mux.Vars(r) 31 tokenName := vars["symbol"] 32 33 res, _, err := cliCtx.QueryWithData(fmt.Sprintf("custom/%s/info/%s", storeName, tokenName), nil) 34 if err != nil { 35 sdkErr := common.ParseSDKError(err.Error()) 36 common.HandleErrorMsg(w, cliCtx, sdkErr.Code, err.Error()) 37 return 38 } 39 result := common.GetBaseResponse("hello") 40 result2, err2 := json.Marshal(result) 41 if err2 != nil { 42 common.HandleErrorMsg(w, cliCtx, common.CodeMarshalJSONFailed, err2.Error()) 43 return 44 } 45 result2 = []byte(strings.Replace(string(result2), "\"hello\"", string(res), 1)) 46 rest.PostProcessResponse(w, cliCtx, result2) 47 } 48 } 49 50 func tokensHandler(cliCtx context.CLIContext, storeName string) http.HandlerFunc { 51 return func(w http.ResponseWriter, r *http.Request) { 52 ownerAddress := r.URL.Query().Get("address") 53 res, _, err := cliCtx.QueryWithData(fmt.Sprintf("custom/%s/tokens/%s", storeName, ownerAddress), nil) 54 if err != nil { 55 sdkErr := common.ParseSDKError(err.Error()) 56 common.HandleErrorMsg(w, cliCtx, sdkErr.Code, err.Error()) 57 return 58 } 59 60 result := common.GetBaseResponse("hello") 61 result2, err2 := json.Marshal(result) 62 if err2 != nil { 63 common.HandleErrorMsg(w, cliCtx, common.CodeMarshalJSONFailed, err2.Error()) 64 return 65 } 66 result2 = []byte(strings.Replace(string(result2), "\"hello\"", string(res), 1)) 67 rest.PostProcessResponse(w, cliCtx, result2) 68 } 69 } 70 71 func currencyDescribeHandler(cliCtx context.CLIContext, storeName string) http.HandlerFunc { 72 return func(w http.ResponseWriter, r *http.Request) { 73 res, _, err := cliCtx.QueryWithData(fmt.Sprintf("custom/%s/currency/describe", storeName), nil) 74 if err != nil { 75 sdkErr := common.ParseSDKError(err.Error()) 76 common.HandleErrorMsg(w, cliCtx, sdkErr.Code, err.Error()) 77 return 78 } 79 80 result := common.GetBaseResponse("hello") 81 result2, err2 := json.Marshal(result) 82 if err2 != nil { 83 common.HandleErrorMsg(w, cliCtx, common.CodeMarshalJSONFailed, err2.Error()) 84 return 85 } 86 result2 = []byte(strings.Replace(string(result2), "\"hello\"", string(res), 1)) 87 rest.PostProcessResponse(w, cliCtx, result2) 88 } 89 } 90 91 func spotAccountsHandler(cliCtx context.CLIContext, storeName string) http.HandlerFunc { 92 return func(w http.ResponseWriter, r *http.Request) { 93 vars := mux.Vars(r) 94 address := vars["address"] 95 96 symbol := r.URL.Query().Get("symbol") 97 show := r.URL.Query().Get("show") 98 99 if show == "" { 100 show = "partial" 101 } 102 if show != "partial" && show != "all" { 103 result := common.GetErrorResponseJSON(1, "", "param show not valid") 104 rest.PostProcessResponse(w, cliCtx, result) 105 return 106 } 107 108 accountParam := types.AccountParam{ 109 Symbol: symbol, 110 Show: show, 111 //QueryPage: token.QueryPage{ 112 // Page: pageInt, 113 // PerPage: perPageInt, 114 //}, 115 } 116 117 bz, err := cliCtx.Codec.MarshalJSON(accountParam) 118 if err != nil { 119 common.HandleErrorMsg(w, cliCtx, common.CodeMarshalJSONFailed, err.Error()) 120 return 121 } 122 res, _, err := cliCtx.QueryWithData(fmt.Sprintf("custom/%s/accounts/%s", storeName, address), bz) 123 if err != nil { 124 sdkErr := common.ParseSDKError(err.Error()) 125 common.HandleErrorMsg(w, cliCtx, sdkErr.Code, err.Error()) 126 return 127 } 128 129 result := common.GetBaseResponse("hello") 130 result2, err2 := json.Marshal(result) 131 if err2 != nil { 132 common.HandleErrorMsg(w, cliCtx, common.CodeMarshalJSONFailed, err2.Error()) 133 return 134 } 135 result2 = []byte(strings.Replace(string(result2), "\"hello\"", string(res), 1)) 136 rest.PostProcessResponse(w, cliCtx, result2) 137 } 138 } 139 140 func uploadAccountsHandler(cliCtx context.CLIContext, storeName string) http.HandlerFunc { 141 return func(w http.ResponseWriter, r *http.Request) { 142 res, _, err := cliCtx.QueryWithData(fmt.Sprintf("custom/%s/upload", storeName), nil) 143 if err != nil { 144 sdkErr := common.ParseSDKError(err.Error()) 145 common.HandleErrorMsg(w, cliCtx, sdkErr.Code, err.Error()) 146 return 147 } 148 result := common.GetBaseResponse("hello") 149 result2, err2 := json.Marshal(result) 150 if err2 != nil { 151 common.HandleErrorMsg(w, cliCtx, common.CodeMarshalJSONFailed, err2.Error()) 152 return 153 } 154 result2 = []byte(strings.Replace(string(result2), "\"hello\"", string(res), 1)) 155 rest.PostProcessResponse(w, cliCtx, result2) 156 } 157 }