github.com/Finschia/finschia-sdk@v0.49.1/x/fswap/keeper/grpc_query.go (about)

     1  package keeper
     2  
     3  import (
     4  	"context"
     5  
     6  	"google.golang.org/grpc/codes"
     7  	"google.golang.org/grpc/status"
     8  
     9  	"github.com/Finschia/finschia-sdk/store/prefix"
    10  	sdk "github.com/Finschia/finschia-sdk/types"
    11  	sdkerrors "github.com/Finschia/finschia-sdk/types/errors"
    12  	"github.com/Finschia/finschia-sdk/types/query"
    13  	"github.com/Finschia/finschia-sdk/x/fswap/types"
    14  )
    15  
    16  var _ types.QueryServer = QueryServer{}
    17  
    18  type QueryServer struct {
    19  	Keeper
    20  }
    21  
    22  func NewQueryServer(keeper Keeper) *QueryServer {
    23  	return &QueryServer{
    24  		keeper,
    25  	}
    26  }
    27  
    28  func (s QueryServer) Swapped(ctx context.Context, req *types.QuerySwappedRequest) (*types.QuerySwappedResponse, error) {
    29  	c := sdk.UnwrapSDKContext(ctx)
    30  	if err := sdk.ValidateDenom(req.GetFromDenom()); err != nil {
    31  		return nil, sdkerrors.ErrInvalidRequest.Wrap(err.Error())
    32  	}
    33  	if err := sdk.ValidateDenom(req.GetToDenom()); err != nil {
    34  		return nil, sdkerrors.ErrInvalidRequest.Wrap(err.Error())
    35  	}
    36  
    37  	swapped, err := s.Keeper.getSwapped(c, req.GetFromDenom(), req.GetToDenom())
    38  	if err != nil {
    39  		return nil, err
    40  	}
    41  
    42  	return &types.QuerySwappedResponse{
    43  		FromCoinAmount: swapped.GetFromCoinAmount(),
    44  		ToCoinAmount:   swapped.GetToCoinAmount(),
    45  	}, nil
    46  }
    47  
    48  func (s QueryServer) TotalSwappableToCoinAmount(ctx context.Context, req *types.QueryTotalSwappableToCoinAmountRequest) (*types.QueryTotalSwappableToCoinAmountResponse, error) {
    49  	c := sdk.UnwrapSDKContext(ctx)
    50  	if err := sdk.ValidateDenom(req.GetFromDenom()); err != nil {
    51  		return nil, sdkerrors.ErrInvalidRequest.Wrap(err.Error())
    52  	}
    53  	if err := sdk.ValidateDenom(req.GetToDenom()); err != nil {
    54  		return nil, sdkerrors.ErrInvalidRequest.Wrap(err.Error())
    55  	}
    56  
    57  	amount, err := s.Keeper.getSwappableNewCoinAmount(c, req.GetFromDenom(), req.GetToDenom())
    58  	if err != nil {
    59  		return &types.QueryTotalSwappableToCoinAmountResponse{}, err
    60  	}
    61  
    62  	return &types.QueryTotalSwappableToCoinAmountResponse{SwappableAmount: amount}, nil
    63  }
    64  
    65  func (s QueryServer) Swap(ctx context.Context, req *types.QuerySwapRequest) (*types.QuerySwapResponse, error) {
    66  	if err := req.Validate(); err != nil {
    67  		return nil, err
    68  	}
    69  
    70  	c := sdk.UnwrapSDKContext(ctx)
    71  	swap, err := s.Keeper.getSwap(c, req.GetFromDenom(), req.GetToDenom())
    72  	if err != nil {
    73  		return nil, status.Error(codes.NotFound, err.Error())
    74  	}
    75  
    76  	return &types.QuerySwapResponse{Swap: swap}, nil
    77  }
    78  
    79  func (s QueryServer) Swaps(ctx context.Context, req *types.QuerySwapsRequest) (*types.QuerySwapsResponse, error) {
    80  	c := sdk.UnwrapSDKContext(ctx)
    81  
    82  	swaps := []types.Swap{}
    83  	store := c.KVStore(s.storeKey)
    84  	swapStore := prefix.NewStore(store, swapPrefix)
    85  	pageResponse, err := query.Paginate(swapStore, req.Pagination, func(key, value []byte) error {
    86  		swap := types.Swap{}
    87  		if err := s.Keeper.cdc.Unmarshal(value, &swap); err != nil {
    88  			return err
    89  		}
    90  		swaps = append(swaps, swap)
    91  		return nil
    92  	})
    93  	if err != nil {
    94  		return nil, err
    95  	}
    96  	return &types.QuerySwapsResponse{
    97  		Swaps:      swaps,
    98  		Pagination: pageResponse,
    99  	}, nil
   100  }