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