github.com/Finschia/finschia-sdk@v0.48.1/x/evidence/keeper/querier.go (about)

     1  package keeper
     2  
     3  import (
     4  	"github.com/Finschia/finschia-sdk/client"
     5  	"github.com/Finschia/finschia-sdk/codec"
     6  	sdk "github.com/Finschia/finschia-sdk/types"
     7  	sdkerrors "github.com/Finschia/finschia-sdk/types/errors"
     8  	"github.com/Finschia/finschia-sdk/x/evidence/exported"
     9  	"github.com/Finschia/finschia-sdk/x/evidence/types"
    10  
    11  	abci "github.com/tendermint/tendermint/abci/types"
    12  )
    13  
    14  func NewQuerier(k Keeper, legacyQuerierCdc *codec.LegacyAmino) sdk.Querier {
    15  	return func(ctx sdk.Context, path []string, req abci.RequestQuery) ([]byte, error) {
    16  		var (
    17  			res []byte
    18  			err error
    19  		)
    20  
    21  		switch path[0] {
    22  		case types.QueryEvidence:
    23  			res, err = queryEvidence(ctx, req, k, legacyQuerierCdc)
    24  
    25  		case types.QueryAllEvidence:
    26  			res, err = queryAllEvidence(ctx, req, k, legacyQuerierCdc)
    27  
    28  		default:
    29  			err = sdkerrors.Wrapf(sdkerrors.ErrUnknownRequest, "unknown %s query endpoint: %s", types.ModuleName, path[0])
    30  		}
    31  
    32  		return res, err
    33  	}
    34  }
    35  
    36  func queryEvidence(ctx sdk.Context, req abci.RequestQuery, k Keeper, legacyQuerierCdc *codec.LegacyAmino) ([]byte, error) {
    37  	var params types.QueryEvidenceRequest
    38  
    39  	err := legacyQuerierCdc.UnmarshalJSON(req.Data, &params)
    40  	if err != nil {
    41  		return nil, sdkerrors.Wrap(sdkerrors.ErrJSONUnmarshal, err.Error())
    42  	}
    43  
    44  	evidence, ok := k.GetEvidence(ctx, params.EvidenceHash)
    45  	if !ok {
    46  		return nil, sdkerrors.Wrap(types.ErrNoEvidenceExists, params.EvidenceHash.String())
    47  	}
    48  
    49  	res, err := codec.MarshalJSONIndent(legacyQuerierCdc, evidence)
    50  	if err != nil {
    51  		return nil, sdkerrors.Wrap(sdkerrors.ErrJSONMarshal, err.Error())
    52  	}
    53  
    54  	return res, nil
    55  }
    56  
    57  func queryAllEvidence(ctx sdk.Context, req abci.RequestQuery, k Keeper, legacyQuerierCdc *codec.LegacyAmino) ([]byte, error) {
    58  	var params types.QueryAllEvidenceParams
    59  
    60  	err := legacyQuerierCdc.UnmarshalJSON(req.Data, &params)
    61  	if err != nil {
    62  		return nil, sdkerrors.Wrap(sdkerrors.ErrJSONUnmarshal, err.Error())
    63  	}
    64  
    65  	evidence := k.GetAllEvidence(ctx)
    66  
    67  	start, end := client.Paginate(len(evidence), params.Page, params.Limit, 100)
    68  	if start < 0 || end < 0 {
    69  		evidence = []exported.Evidence{}
    70  	} else {
    71  		evidence = evidence[start:end]
    72  	}
    73  
    74  	res, err := codec.MarshalJSONIndent(legacyQuerierCdc, evidence)
    75  	if err != nil {
    76  		return nil, sdkerrors.Wrap(sdkerrors.ErrJSONMarshal, err.Error())
    77  	}
    78  
    79  	return res, nil
    80  }