-
Notifications
You must be signed in to change notification settings - Fork 193
/
grpc_query_user_redemption_record_for_user.go
52 lines (43 loc) · 1.48 KB
/
grpc_query_user_redemption_record_for_user.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
package keeper
import (
"context"
errorsmod "cosmossdk.io/errors"
sdk "github.com/cosmos/cosmos-sdk/types"
sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
"google.golang.org/grpc/codes"
"google.golang.org/grpc/status"
"github.com/Stride-Labs/stride/v11/x/records/types"
)
func (k Keeper) UserRedemptionRecordForUser(c context.Context, req *types.QueryAllUserRedemptionRecordForUserRequest) (*types.QueryAllUserRedemptionRecordForUserResponse, error) {
if req == nil {
return nil, status.Error(codes.InvalidArgument, "invalid request")
}
// validate the address
_, err := sdk.AccAddressFromBech32(req.Address)
if err != nil {
return nil, errorsmod.Wrap(sdkerrors.ErrInvalidAddress, req.Address)
}
var userRedemptionRecords []types.UserRedemptionRecord
ctx := sdk.UnwrapSDKContext(c)
// limit loop to 50 records for performance
var loopback uint64
loopback = req.Limit
if loopback > 50 {
loopback = 50
}
var i uint64
for i = 0; i < loopback; i++ {
if i > req.Day {
// we have reached the end of the records
break
}
currentDay := req.Day - i
// query the user redemption record for the current day
userRedemptionRecord, found := k.GetUserRedemptionRecord(ctx, types.UserRedemptionRecordKeyFormatter(req.ChainId, currentDay, req.Address))
if !found {
continue
}
userRedemptionRecords = append(userRedemptionRecords, userRedemptionRecord)
}
return &types.QueryAllUserRedemptionRecordForUserResponse{UserRedemptionRecord: userRedemptionRecords}, nil
}