diff --git a/client/utils.go b/client/utils.go new file mode 100644 index 0000000000..900570d319 --- /dev/null +++ b/client/utils.go @@ -0,0 +1,46 @@ +package client + +import ( + b64 "encoding/base64" + + "github.com/cosmos/cosmos-sdk/client/flags" + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + "github.com/cosmos/cosmos-sdk/types/query" + "github.com/spf13/pflag" +) + +// ReadPageRequest reads and builds the necessary page request flags for pagination. +func ReadPageRequest(flagSet *pflag.FlagSet) (*query.PageRequest, error) { + pageKeyStr, _ := flagSet.GetString(flags.FlagPageKey) + offset, _ := flagSet.GetUint64(flags.FlagOffset) + limit, _ := flagSet.GetUint64(flags.FlagLimit) + countTotal, _ := flagSet.GetBool(flags.FlagCountTotal) + page, _ := flagSet.GetUint64(flags.FlagPage) + reverse, _ := flagSet.GetBool(flags.FlagReverse) + + if page > 1 && offset > 0 { + return nil, sdkerrors.Wrapf(sdkerrors.ErrInvalidRequest, "page and offset cannot be used together") + } + + // Clear page key if using page numbers (page and key are mutually exclusive) + if page > 1 { + offset = (page - 1) * limit + } + + var pageKey []byte + if pageKeyStr != "" { + var err error + pageKey, err = b64.StdEncoding.DecodeString(pageKeyStr) + if err != nil { + return nil, sdkerrors.Wrapf(sdkerrors.ErrInvalidRequest, "invalid pagination key") + } + } + + return &query.PageRequest{ + Key: pageKey, + Offset: offset, + Limit: limit, + CountTotal: countTotal, + Reverse: reverse, + }, nil +} diff --git a/x/audit/client/cli/query.go b/x/audit/client/cli/query.go index 5edc94b650..bb12780a8c 100644 --- a/x/audit/client/cli/query.go +++ b/x/audit/client/cli/query.go @@ -11,6 +11,7 @@ import ( types "github.com/akash-network/akash-api/go/node/audit/v1beta3" aclient "github.com/akash-network/node/client" + clientutils "github.com/akash-network/node/client" ) func GetQueryCmd() *cobra.Command { @@ -46,7 +47,7 @@ func cmdGetProviders() *cobra.Command { return err } - pageReq, err := sdkclient.ReadPageRequest(cmd.Flags()) + pageReq, err := clientutils.ReadPageRequest(cmd.Flags()) if err != nil { return err } diff --git a/x/cert/client/cli/query.go b/x/cert/client/cli/query.go index 991c52037b..7b70868052 100644 --- a/x/cert/client/cli/query.go +++ b/x/cert/client/cli/query.go @@ -12,6 +12,7 @@ import ( types "github.com/akash-network/akash-api/go/node/cert/v1beta3" aclient "github.com/akash-network/node/client" + clientutils "github.com/akash-network/node/client" ) const ( @@ -52,7 +53,7 @@ func cmdGetCertificates() *cobra.Command { return err } - pageReq, err := sdkclient.ReadPageRequest(cmd.Flags()) + pageReq, err := clientutils.ReadPageRequest(cmd.Flags()) if err != nil { return err } diff --git a/x/deployment/client/cli/query.go b/x/deployment/client/cli/query.go index d8f997b856..d6dc4aef7b 100644 --- a/x/deployment/client/cli/query.go +++ b/x/deployment/client/cli/query.go @@ -10,6 +10,7 @@ import ( types "github.com/akash-network/akash-api/go/node/deployment/v1beta3" aclient "github.com/akash-network/node/client" + clientutils "github.com/akash-network/node/client" ) // GetQueryCmd returns the query commands for the deployment module @@ -53,7 +54,7 @@ func cmdDeployments() *cobra.Command { return err } - pageReq, err := sdkclient.ReadPageRequest(cmd.Flags()) + pageReq, err := clientutils.ReadPageRequest(cmd.Flags()) if err != nil { return err } diff --git a/x/market/client/cli/bid.go b/x/market/client/cli/bid.go index cd2562e282..2236065855 100644 --- a/x/market/client/cli/bid.go +++ b/x/market/client/cli/bid.go @@ -8,6 +8,7 @@ import ( types "github.com/akash-network/akash-api/go/node/market/v1beta4" aclient "github.com/akash-network/node/client" + clientutils "github.com/akash-network/node/client" ) func cmdGetBids() *cobra.Command { @@ -32,7 +33,7 @@ func cmdGetBids() *cobra.Command { return err } - pageReq, err := sdkclient.ReadPageRequest(cmd.Flags()) + pageReq, err := clientutils.ReadPageRequest(cmd.Flags()) if err != nil { return err } diff --git a/x/market/client/cli/lease.go b/x/market/client/cli/lease.go index f8267dd14f..eec20b153e 100644 --- a/x/market/client/cli/lease.go +++ b/x/market/client/cli/lease.go @@ -8,6 +8,7 @@ import ( types "github.com/akash-network/akash-api/go/node/market/v1beta4" aclient "github.com/akash-network/node/client" + clientutils "github.com/akash-network/node/client" ) func cmdGetLeases() *cobra.Command { @@ -32,7 +33,7 @@ func cmdGetLeases() *cobra.Command { return err } - pageReq, err := sdkclient.ReadPageRequest(cmd.Flags()) + pageReq, err := clientutils.ReadPageRequest(cmd.Flags()) if err != nil { return err } diff --git a/x/market/client/cli/order.go b/x/market/client/cli/order.go index 0fee536a27..e8388c26ca 100644 --- a/x/market/client/cli/order.go +++ b/x/market/client/cli/order.go @@ -8,6 +8,7 @@ import ( types "github.com/akash-network/akash-api/go/node/market/v1beta4" aclient "github.com/akash-network/node/client" + clientutils "github.com/akash-network/node/client" ) func cmdGetOrders() *cobra.Command { @@ -32,7 +33,7 @@ func cmdGetOrders() *cobra.Command { return err } - pageReq, err := sdkclient.ReadPageRequest(cmd.Flags()) + pageReq, err := clientutils.ReadPageRequest(cmd.Flags()) if err != nil { return err } diff --git a/x/provider/client/cli/query.go b/x/provider/client/cli/query.go index 1faca8fb1f..1109fcf978 100644 --- a/x/provider/client/cli/query.go +++ b/x/provider/client/cli/query.go @@ -9,6 +9,7 @@ import ( types "github.com/akash-network/akash-api/go/node/provider/v1beta3" aclient "github.com/akash-network/node/client" + clientutils "github.com/akash-network/node/client" ) // GetQueryCmd returns the transaction commands for the provider module @@ -45,7 +46,7 @@ func cmdGetProviders() *cobra.Command { return err } - pageReq, err := sdkclient.ReadPageRequest(cmd.Flags()) + pageReq, err := clientutils.ReadPageRequest(cmd.Flags()) if err != nil { return err }