Skip to content

Commit

Permalink
Add or update vote logic
Browse files Browse the repository at this point in the history
  • Loading branch information
Artur Abliazimov committed Sep 9, 2024
1 parent fc394b8 commit a4e861f
Show file tree
Hide file tree
Showing 4 changed files with 28 additions and 22 deletions.
2 changes: 1 addition & 1 deletion warden/x/act/keeper/actions.go
Original file line number Diff line number Diff line change
Expand Up @@ -239,7 +239,7 @@ func (k Keeper) AddAction(ctx context.Context, creator string, msg sdk.Msg, time

// add initial approver
sdkCtx := sdk.UnwrapSDKContext(ctx)
if err := act.AddApprover(sdkCtx, creator); err != nil {
if err := act.AddOrUpdateVote(sdkCtx, creator, types.ActionVoteType_VOTE_TYPE_APPROVED); err != nil {
return nil, err
}

Expand Down
2 changes: 1 addition & 1 deletion warden/x/act/keeper/msg_server_vote_for_action.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ func (k msgServer) VoteForAction(goCtx context.Context, msg *types.MsgVoteForAct
}, nil
}

if err := act.AddVote(ctx, msg.Participant, msg.VoteType); err != nil {
if err := act.AddOrUpdateVote(ctx, msg.Participant, msg.VoteType); err != nil {
return nil, err
}

Expand Down
15 changes: 11 additions & 4 deletions warden/x/act/types/v1beta1/action.go
Original file line number Diff line number Diff line change
Expand Up @@ -72,19 +72,26 @@ func (a *Action) AddApprover(ctx sdk.Context, address string) error {
return nil
}

func (a *Action) AddVote(ctx sdk.Context, participant string, voteType ActionVoteType) error {
func (a *Action) AddOrUpdateVote(ctx sdk.Context, participant string, voteType ActionVoteType) error {
if a.Status != ActionStatus_ACTION_STATUS_PENDING {
return errors.Wrapf(ErrInvalidActionStatus, "can't add a vote to an action that's not pending")
}

for _, v := range a.Votes {
updated := false

for i, v := range a.Votes {
if v.Participant == participant {
return ErrAlreadyParticipatedInVoting
a.Votes[i].VoteType = voteType
updated = true
break
}
}

if !updated {
a.Votes = append(a.Votes, NewVote(participant, voteType, ctx.BlockTime()))
}

a.UpdatedAt = ctx.BlockTime()
a.Votes = append(a.Votes, NewVote(participant, voteType, a.UpdatedAt))

if err := ctx.EventManager().EmitTypedEvent(&EventActionVoted{
Id: a.Id,
Expand Down
31 changes: 15 additions & 16 deletions warden/x/act/types/v1beta1/errors.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,20 +8,19 @@ import (

// x/act module sentinel errors
var (
ErrInvalidSigner = sdkerrors.Register(ModuleName, 1100, "expected gov account as only signer for proposal message")
ErrSample = sdkerrors.Register(ModuleName, 1101, "sample error")
ErrInvalidActionMsgSigner = sdkerrors.Register(ModuleName, 1102, "expected x/act account as only signer for action message")
ErrInvalidActionStatus = sdkerrors.Register(ModuleName, 1103, "invalid action status")
ErrInvalidActionStatusChange = sdkerrors.Register(ModuleName, 1104, "invalid status change")
ErrApproverExists = sdkerrors.Register(ModuleName, 1105, "approver already exists")
ErrRuleEvaluationFailed = sdkerrors.Register(ModuleName, 1106, "rule evaluation failed")
ErrRuleNotBoolean = sdkerrors.Register(ModuleName, 1107, "rule must evaluate to a boolean")
ErrInvalidRule = sdkerrors.Register(ModuleName, 1108, "rule is invalid")
ErrInvalidActionMsg = sdkerrors.Register(ModuleName, 1109, "invalid action message")
ErrNoActionMsgHandler = sdkerrors.Register(ModuleName, 1110, "no action message handler registered for message type")
ErrNoRuleRegistryHandler = sdkerrors.Register(ModuleName, 1111, "no rule registry handler registered for message type")
ErrInvalidRuleDefinition = sdkerrors.Register(ModuleName, 1112, "invalid rule definition")
ErrInvalidRevoker = sdkerrors.Register(ModuleName, 1113, "this account can't revoke this action")
ErrInvalidUpdateRuleAccount = sdkerrors.Register(ModuleName, 1114, "this account can't update this rule")
ErrAlreadyParticipatedInVoting = sdkerrors.Register(ModuleName, 1115, "account already participated in voting")
ErrInvalidSigner = sdkerrors.Register(ModuleName, 1100, "expected gov account as only signer for proposal message")
ErrSample = sdkerrors.Register(ModuleName, 1101, "sample error")
ErrInvalidActionMsgSigner = sdkerrors.Register(ModuleName, 1102, "expected x/act account as only signer for action message")
ErrInvalidActionStatus = sdkerrors.Register(ModuleName, 1103, "invalid action status")
ErrInvalidActionStatusChange = sdkerrors.Register(ModuleName, 1104, "invalid status change")
ErrApproverExists = sdkerrors.Register(ModuleName, 1105, "approver already exists")
ErrRuleEvaluationFailed = sdkerrors.Register(ModuleName, 1106, "rule evaluation failed")
ErrRuleNotBoolean = sdkerrors.Register(ModuleName, 1107, "rule must evaluate to a boolean")
ErrInvalidRule = sdkerrors.Register(ModuleName, 1108, "rule is invalid")
ErrInvalidActionMsg = sdkerrors.Register(ModuleName, 1109, "invalid action message")
ErrNoActionMsgHandler = sdkerrors.Register(ModuleName, 1110, "no action message handler registered for message type")
ErrNoRuleRegistryHandler = sdkerrors.Register(ModuleName, 1111, "no rule registry handler registered for message type")
ErrInvalidRuleDefinition = sdkerrors.Register(ModuleName, 1112, "invalid rule definition")
ErrInvalidRevoker = sdkerrors.Register(ModuleName, 1113, "this account can't revoke this action")
ErrInvalidUpdateRuleAccount = sdkerrors.Register(ModuleName, 1114, "this account can't update this rule")
)

0 comments on commit a4e861f

Please sign in to comment.