summaryrefslogtreecommitdiff
path: root/forms.go
blob: d5359ff1dc16acbe7a42c0805e55aea08f7a07f4 (plain)
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
53
54
package main

import (
	"fmt"
	"strconv"
	"strings"
	"time"
)

var validDueDurations = map[string]time.Duration{
	"+3 days":  time.Hour * 24 * 3,
	"+7 days":  time.Hour * 24 * 7,
	"+14 days": time.Hour * 24 * 14,
	"+28 days": time.Hour * 24 * 28,
}

type NewDecisionForm struct {
	Title    string
	Content  string
	VoteType string
	Due      string
	Errors   map[string]string
}

func (f *NewDecisionForm) Validate() (bool, *Decision) {
	f.Errors = make(map[string]string)

	data := &Decision{}

	data.Title = strings.TrimSpace(f.Title)
	if len(data.Title) < 3 {
		f.Errors["Title"] = "Please enter at least 3 characters."
	}

	data.Content = strings.TrimSpace(f.Content)
	if len(strings.Fields(data.Content)) < 3 {
		f.Errors["Content"] = "Please enter at least 3 words."
	}

	if voteType, err := strconv.ParseUint(f.VoteType, 10, 8); err != nil || (voteType != 0 && voteType != 1) {
		f.Errors["VoteType"] = fmt.Sprint("Please choose a valid vote type", err)
	} else {
		data.VoteType = VoteType(uint8(voteType))
	}

	if dueDuration, ok := validDueDurations[f.Due]; !ok {
		f.Errors["Due"] = "Please choose a valid due date"
	} else {
		year, month, day := time.Now().UTC().Add(dueDuration).Date()
		data.Due = time.Date(year, month, day, 23,59,59,0, time.UTC)
	}

	return len(f.Errors) == 0, data
}