diff options
Diffstat (limited to 'forms.go')
-rw-r--r-- | forms.go | 37 |
1 files changed, 37 insertions, 0 deletions
@@ -92,3 +92,40 @@ func (f *EditDecisionForm) Validate() (bool, *Decision) { return len(f.Errors) == 0, data } + +type ProxyVoteForm struct { + Voter string + Vote string + Justification string + Errors map[string]string +} + +func (f *ProxyVoteForm) Validate() (bool, *Voter, *Vote, string) { + f.Errors = make(map[string]string) + + data := &Vote{} + + var voter *Voter + if voterId, err := strconv.ParseInt(f.Voter, 10, 64); err != nil { + f.Errors["Voter"] = fmt.Sprint("Please choose a valid voter", err) + } else if voter, err = GetVoterById(voterId); err != nil { + f.Errors["Voter"] = fmt.Sprint("Please choose a valid voter", err) + } else { + data.VoterId = voter.Id + } + + if vote, err := strconv.ParseInt(f.Vote, 10, 8); err != nil { + f.Errors["Vote"] = fmt.Sprint("Please choose a valid vote", err) + } else if voteChoice, ok := VoteChoices[vote]; !ok { + f.Errors["Vote"] = fmt.Sprint("Please choose a valid vote") + } else { + data.Vote = voteChoice + } + + justification := strings.TrimSpace(f.Justification) + if len(justification) < 3 { + f.Errors["Justification"] = "Please enter at least 3 characters." + } + + return len(f.Errors) == 0, voter, data, justification +} |