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  }