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 }