github.com/fibonacci-chain/fbc@v0.0.0-20231124064014-c7636198c1e9/libs/cosmos-sdk/x/evidence/client/rest/query.go (about)

     1  package rest
     2  
     3  import (
     4  	"fmt"
     5  	"net/http"
     6  	"strings"
     7  
     8  	"github.com/fibonacci-chain/fbc/libs/cosmos-sdk/client/context"
     9  	"github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types/rest"
    10  	"github.com/fibonacci-chain/fbc/libs/cosmos-sdk/x/evidence/internal/types"
    11  
    12  	"github.com/gorilla/mux"
    13  )
    14  
    15  func registerQueryRoutes(cliCtx context.CLIContext, r *mux.Router) {
    16  	r.HandleFunc(
    17  		fmt.Sprintf("/evidence/{%s}", RestParamEvidenceHash),
    18  		queryEvidenceHandler(cliCtx),
    19  	).Methods(MethodGet)
    20  
    21  	r.HandleFunc(
    22  		"/evidence",
    23  		queryAllEvidenceHandler(cliCtx),
    24  	).Methods(MethodGet)
    25  
    26  	r.HandleFunc(
    27  		"/evidence/params",
    28  		queryParamsHandler(cliCtx),
    29  	).Methods(MethodGet)
    30  }
    31  
    32  func queryEvidenceHandler(cliCtx context.CLIContext) http.HandlerFunc {
    33  	return func(w http.ResponseWriter, r *http.Request) {
    34  		vars := mux.Vars(r)
    35  		evidenceHash := vars[RestParamEvidenceHash]
    36  
    37  		if strings.TrimSpace(evidenceHash) == "" {
    38  			rest.WriteErrorResponse(w, http.StatusBadRequest, "evidence hash required but not specified")
    39  			return
    40  		}
    41  
    42  		cliCtx, ok := rest.ParseQueryHeightOrReturnBadRequest(w, cliCtx, r)
    43  		if !ok {
    44  			return
    45  		}
    46  
    47  		params := types.NewQueryEvidenceParams(evidenceHash)
    48  		bz, err := cliCtx.Codec.MarshalJSON(params)
    49  		if err != nil {
    50  			rest.WriteErrorResponse(w, http.StatusBadRequest, fmt.Sprintf("failed to marshal query params: %s", err))
    51  			return
    52  		}
    53  
    54  		route := fmt.Sprintf("custom/%s/%s", types.QuerierRoute, types.QueryEvidence)
    55  		res, height, err := cliCtx.QueryWithData(route, bz)
    56  		if err != nil {
    57  			rest.WriteErrorResponse(w, http.StatusInternalServerError, err.Error())
    58  			return
    59  		}
    60  
    61  		cliCtx = cliCtx.WithHeight(height)
    62  		rest.PostProcessResponse(w, cliCtx, res)
    63  	}
    64  }
    65  
    66  func queryAllEvidenceHandler(cliCtx context.CLIContext) http.HandlerFunc {
    67  	return func(w http.ResponseWriter, r *http.Request) {
    68  		_, page, limit, err := rest.ParseHTTPArgsWithLimit(r, 0)
    69  		if err != nil {
    70  			rest.WriteErrorResponse(w, http.StatusBadRequest, err.Error())
    71  			return
    72  		}
    73  
    74  		cliCtx, ok := rest.ParseQueryHeightOrReturnBadRequest(w, cliCtx, r)
    75  		if !ok {
    76  			return
    77  		}
    78  
    79  		params := types.NewQueryAllEvidenceParams(page, limit)
    80  		bz, err := cliCtx.Codec.MarshalJSON(params)
    81  		if err != nil {
    82  			rest.WriteErrorResponse(w, http.StatusBadRequest, fmt.Sprintf("failed to marshal query params: %s", err))
    83  			return
    84  		}
    85  
    86  		route := fmt.Sprintf("custom/%s/%s", types.QuerierRoute, types.QueryAllEvidence)
    87  		res, height, err := cliCtx.QueryWithData(route, bz)
    88  		if err != nil {
    89  			rest.WriteErrorResponse(w, http.StatusInternalServerError, err.Error())
    90  			return
    91  		}
    92  
    93  		cliCtx = cliCtx.WithHeight(height)
    94  		rest.PostProcessResponse(w, cliCtx, res)
    95  	}
    96  }
    97  
    98  func queryParamsHandler(cliCtx context.CLIContext) http.HandlerFunc {
    99  	return func(w http.ResponseWriter, r *http.Request) {
   100  		cliCtx, ok := rest.ParseQueryHeightOrReturnBadRequest(w, cliCtx, r)
   101  		if !ok {
   102  			return
   103  		}
   104  
   105  		route := fmt.Sprintf("custom/%s/%s", types.QuerierRoute, types.QueryParameters)
   106  		res, height, err := cliCtx.QueryWithData(route, nil)
   107  		if err != nil {
   108  			rest.WriteErrorResponse(w, http.StatusInternalServerError, err.Error())
   109  			return
   110  		}
   111  
   112  		cliCtx = cliCtx.WithHeight(height)
   113  		rest.PostProcessResponse(w, cliCtx, res)
   114  	}
   115  }