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 }