@@ -5,14 +5,40 @@ import (
55
66 errorsmod "cosmossdk.io/errors"
77 "github.com/DecentralCardGame/cardchain/x/cardchain/types"
8+ sdk "github.com/cosmos/cosmos-sdk/types"
9+ sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
810)
911
12+ const PICK_SCALER = 1.0
13+
1014func (k msgServer ) UpgradePicksReport (goCtx context.Context , msg * types.MsgUpgradePicksReport ) (* types.MsgUpgradePicksReportResponse , error ) {
1115 if _ , err := k .addressCodec .StringToBytes (msg .Creator ); err != nil {
1216 return nil , errorsmod .Wrap (err , "invalid authority address" )
1317 }
1418
15- // TODO: Handle the message
19+ ctx := sdk .UnwrapSDKContext (goCtx )
20+
21+ creator , err := k .GetUserFromString (ctx , msg .Creator )
22+ if err != nil {
23+ return nil , errorsmod .Wrap (types .ErrUserDoesNotExist , err .Error ())
24+ }
25+ if creator .ReportMatches == false {
26+ return nil , errorsmod .Wrap (sdkerrors .ErrUnauthorized , "Incorrect Reporter" )
27+ }
28+
29+ pickAddition := PICK_SCALER * float32 (len (msg .Dismissed )) / float32 (len (msg .Picked ))
30+
31+ for _ , dismissed := range msg .Dismissed {
32+ upgradeFactor := k .UpgradeFactorK .Get (ctx , dismissed )
33+ upgradeFactor .Picks --
34+ k .UpgradeFactorK .Set (ctx , dismissed , upgradeFactor )
35+ }
36+
37+ for _ , picked := range msg .Picked {
38+ upgradeFactor := k .UpgradeFactorK .Get (ctx , picked )
39+ upgradeFactor .Picks += pickAddition
40+ k .UpgradeFactorK .Set (ctx , picked , upgradeFactor )
41+ }
1642
1743 return & types.MsgUpgradePicksReportResponse {}, nil
1844}
0 commit comments