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 }