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  }