github.com/fibonacci-chain/fbc@v0.0.0-20231124064014-c7636198c1e9/x/order/client/rest/rest.go (about) 1 package rest 2 3 import ( 4 "encoding/json" 5 "fmt" 6 "net/http" 7 "strconv" 8 9 "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/client/context" 10 "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/codec" 11 "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types/rest" 12 "github.com/gorilla/mux" 13 14 "github.com/fibonacci-chain/fbc/x/common" 15 "github.com/fibonacci-chain/fbc/x/order/keeper" 16 "github.com/fibonacci-chain/fbc/x/order/types" 17 ) 18 19 // RegisterRoutes - Central function to define routes that get registered by the main application 20 func RegisterRoutes(cliCtx context.CLIContext, r *mux.Router) { 21 r.HandleFunc("/order/depthbook", orderBookHandler(cliCtx)).Methods("GET") 22 r.HandleFunc("/order/{orderID}", orderDetailHandler(cliCtx)).Methods("GET") 23 } 24 25 func orderDetailHandler(cliCtx context.CLIContext) http.HandlerFunc { 26 return func(w http.ResponseWriter, r *http.Request) { 27 vars := mux.Vars(r) 28 orderID := vars["orderID"] 29 30 res, _, err := cliCtx.QueryWithData(fmt.Sprintf("custom/order/detail/%s", orderID), nil) 31 if err != nil { 32 sdkErr := common.ParseSDKError(err.Error()) 33 common.HandleErrorMsg(w, cliCtx, sdkErr.Code, sdkErr.Message) 34 return 35 } 36 37 order2 := &types.Order{} 38 codec.Cdc.MustUnmarshalJSON(res, order2) 39 response := common.GetBaseResponse(order2) 40 resBytes, err2 := json.Marshal(response) 41 if err2 != nil { 42 common.HandleErrorMsg(w, cliCtx, common.CodeMarshalJSONFailed, err2.Error()) 43 return 44 } 45 rest.PostProcessResponse(w, cliCtx, resBytes) 46 } 47 } 48 49 func orderBookHandler(cliCtx context.CLIContext) http.HandlerFunc { 50 return func(w http.ResponseWriter, r *http.Request) { 51 product := r.URL.Query().Get("product") 52 sizeStr := r.URL.Query().Get("size") 53 // validate request 54 if product == "" { 55 common.HandleErrorMsg(w, cliCtx, types.CodeProductIsEmpty, "invalid params: product is required") 56 return 57 } 58 var size int 59 var err error 60 if sizeStr != "" { 61 size, err = strconv.Atoi(sizeStr) 62 if err != nil { 63 common.HandleErrorMsg(w, cliCtx, common.CodeStrconvFailed, err.Error()) 64 return 65 } 66 } 67 if size < 0 { 68 common.HandleErrorMsg(w, cliCtx, types.CodeSizeIsInvalid, fmt.Sprintf("invalid param: size= %d", size)) 69 return 70 } 71 params := keeper.NewQueryDepthBookParams(product, uint(size)) 72 bz, err := cliCtx.Codec.MarshalJSON(params) 73 if err != nil { 74 common.HandleErrorMsg(w, cliCtx, common.CodeMarshalJSONFailed, err.Error()) 75 return 76 } 77 78 res, _, err := cliCtx.QueryWithData("custom/order/depthbook", bz) 79 if err != nil { 80 sdkErr := common.ParseSDKError(err.Error()) 81 common.HandleErrorMsg(w, cliCtx, sdkErr.Code, sdkErr.Message) 82 return 83 } 84 85 bookRes := &keeper.BookRes{} 86 codec.Cdc.MustUnmarshalJSON(res, bookRes) 87 response := common.GetBaseResponse(bookRes) 88 resBytes, err2 := json.Marshal(response) 89 if err2 != nil { 90 common.HandleErrorMsg(w, cliCtx, common.CodeMarshalJSONFailed, err2.Error()) 91 return 92 } 93 rest.PostProcessResponse(w, cliCtx, resBytes) 94 } 95 }