Skip to content

Commit 1421e19

Browse files
committed
fix members query in bandtss module
1 parent 970e9e8 commit 1421e19

File tree

5 files changed

+176
-119
lines changed

5 files changed

+176
-119
lines changed

proto/bandtss/v1beta1/query.proto

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -74,8 +74,8 @@ message QueryIsGranteeResponse {
7474

7575
// QueryMembersRequest is the request type for the Query/Members RPC method.
7676
message QueryMembersRequest {
77-
// is_active define filter on members
78-
bool is_active = 1;
77+
// status define type of filter on member's status.
78+
MemberStatusFilter status = 1;
7979
// pagination defines pagination settings for the request.
8080
cosmos.base.query.v1beta1.PageRequest pagination = 2;
8181
}
@@ -147,3 +147,15 @@ message QueryReplacementResponse {
147147
// replacement is the replacement information.
148148
Replacement replacement = 1 [(gogoproto.nullable) = false];
149149
}
150+
151+
// MemberStatusFilter defines the query options for filtering members by their active status.
152+
enum MemberStatusFilter {
153+
option (gogoproto.goproto_enum_prefix) = false;
154+
155+
// MEMBER_STATUS_FILTER_UNSPECIFIED defines a filter for unspecified active status.
156+
MEMBER_STATUS_FILTER_UNSPECIFIED = 0;
157+
// MEMBER_STATUS_FILTER_ACTIVE defines a filter for active status.
158+
MEMBER_STATUS_FILTER_ACTIVE = 1;
159+
// MEMBER_STATUS_FILTER_INACTIVE defines a filter for inactive status.
160+
MEMBER_STATUS_FILTER_INACTIVE = 2;
161+
}

x/bandtss/client/cli/query.go

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,10 @@ import (
1010
"github.com/bandprotocol/chain/v2/x/bandtss/types"
1111
)
1212

13+
const (
14+
flagMemberStatusFilter = "status"
15+
)
16+
1317
// GetQueryCmd returns the cli query commands for this module
1418
func GetQueryCmd() *cobra.Command {
1519
cmd := &cobra.Command{
@@ -66,24 +70,33 @@ func GetQueryCmdMember() *cobra.Command {
6670
// GetQueryCmdMembers creates a CLI command for querying members information.
6771
func GetQueryCmdMembers() *cobra.Command {
6872
cmd := &cobra.Command{
69-
Use: "members [is-active]",
73+
Use: "members",
7074
Short: "Query the members information of the active group",
71-
Args: cobra.ExactArgs(1),
75+
Args: cobra.NoArgs,
7276
RunE: func(cmd *cobra.Command, args []string) error {
7377
clientCtx, err := client.GetClientQueryContext(cmd)
7478
if err != nil {
7579
return err
7680
}
7781

78-
isActive, err := strconv.ParseBool(args[0])
82+
statusFilterFlag, err := cmd.Flags().GetBool(flagMemberStatusFilter)
7983
if err != nil {
8084
return err
8185
}
8286

87+
var statusFilter types.MemberStatusFilter
88+
if !cmd.Flags().Changed(flagMemberStatusFilter) {
89+
statusFilter = types.MEMBER_STATUS_FILTER_UNSPECIFIED
90+
} else if statusFilterFlag {
91+
statusFilter = types.MEMBER_STATUS_FILTER_ACTIVE
92+
} else {
93+
statusFilter = types.MEMBER_STATUS_FILTER_INACTIVE
94+
}
95+
8396
queryClient := types.NewQueryClient(clientCtx)
8497

8598
res, err := queryClient.Members(cmd.Context(), &types.QueryMembersRequest{
86-
IsActive: isActive,
99+
Status: statusFilter,
87100
})
88101
if err != nil {
89102
return err
@@ -93,6 +106,7 @@ func GetQueryCmdMembers() *cobra.Command {
93106
},
94107
}
95108

109+
cmd.Flags().Bool(flagMemberStatusFilter, false, "Filter members by status")
96110
flags.AddQueryFlagsToCmd(cmd)
97111

98112
return cmd

x/bandtss/keeper/grpc_query.go

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -79,10 +79,20 @@ func (q queryServer) Members(
7979
req.Pagination,
8080
func(key []byte, m *types.Member) (*types.Member, error) {
8181
// filter item out if the member's isActive is not equal to the request status.
82-
if m.IsActive != req.IsActive {
83-
return nil, nil
82+
switch req.Status {
83+
case types.MEMBER_STATUS_FILTER_UNSPECIFIED:
84+
return m, nil
85+
case types.MEMBER_STATUS_FILTER_ACTIVE:
86+
if m.IsActive {
87+
return m, nil
88+
}
89+
case types.MEMBER_STATUS_FILTER_INACTIVE:
90+
if !m.IsActive {
91+
return m, nil
92+
}
8493
}
85-
return m, nil
94+
95+
return nil, nil
8696
},
8797
func() *types.Member {
8898
return &types.Member{}

x/bandtss/keeper/grpc_query_test.go

Lines changed: 15 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,12 @@ func TestGRPCQueryMembers(t *testing.T) {
2121
lastActive := time.Now().UTC()
2222

2323
members := []*types.Member{
24+
{
25+
Address: "band1p40yh3zkmhcv0ecqp3mcazy83sa57rgjp07dun",
26+
IsActive: false,
27+
Since: since,
28+
LastActive: lastActive,
29+
},
2430
{
2531
Address: "band1t5x8hrmht463eq4m0xhfgz95h62dyvkq049eek",
2632
IsActive: true,
@@ -42,59 +48,42 @@ func TestGRPCQueryMembers(t *testing.T) {
4248
expectOut expectOut
4349
}{
4450
{
45-
name: "get 2 active members",
51+
name: "get all members",
4652
input: &types.QueryMembersRequest{
47-
IsActive: true,
53+
Status: types.MEMBER_STATUS_FILTER_UNSPECIFIED,
4854
},
4955
expectOut: expectOut{members: members},
5056
},
5157
{
5258
name: "get 1 active members; limit 1 offset 0",
5359
input: &types.QueryMembersRequest{
54-
IsActive: true,
60+
Status: types.MEMBER_STATUS_FILTER_ACTIVE,
5561
Pagination: &querytypes.PageRequest{Limit: 1, Offset: 0},
5662
},
57-
expectOut: expectOut{members: members[:1]},
63+
expectOut: expectOut{members: members[1:2]},
5864
},
5965
{
6066
name: "get 1 active members limit 1 offset 1",
6167
input: &types.QueryMembersRequest{
62-
IsActive: true,
68+
Status: types.MEMBER_STATUS_FILTER_ACTIVE,
6369
Pagination: &querytypes.PageRequest{Limit: 1, Offset: 1},
6470
},
65-
expectOut: expectOut{members: members[1:]},
71+
expectOut: expectOut{members: members[2:]},
6672
},
6773
{
6874
name: "get 0 active members; out of pages limit 1 offset 5",
6975
input: &types.QueryMembersRequest{
70-
IsActive: true,
76+
Status: types.MEMBER_STATUS_FILTER_ACTIVE,
7177
Pagination: &querytypes.PageRequest{Limit: 1, Offset: 5},
7278
},
7379
expectOut: expectOut{members: []*types.Member{}},
7480
},
7581
{
7682
name: "get no inactive members",
7783
input: &types.QueryMembersRequest{
78-
IsActive: false,
79-
},
80-
expectOut: expectOut{members: []*types.Member{}},
81-
},
82-
{
83-
name: "get inactive members",
84-
preProcess: func(s *testutil.TestSuite) {
85-
s.Keeper.SetMember(s.Ctx, types.Member{
86-
Address: members[0].Address,
87-
IsActive: false,
88-
Since: members[0].Since,
89-
LastActive: members[0].LastActive,
90-
})
91-
},
92-
input: &types.QueryMembersRequest{
93-
IsActive: false,
84+
Status: types.MEMBER_STATUS_FILTER_INACTIVE,
9485
},
95-
expectOut: expectOut{members: []*types.Member{
96-
{Address: members[0].Address, IsActive: false, Since: members[0].Since, LastActive: members[0].LastActive},
97-
}},
86+
expectOut: expectOut{members: members[0:1]},
9887
},
9988
}
10089

0 commit comments

Comments
 (0)