/
postpreview.go
114 lines (89 loc) · 3.46 KB
/
postpreview.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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
package handlers
import (
"net/http"
"strconv"
"github.com/EngineerKamesh/gofullstack/volume3/section4/gopherface/models/socialmedia"
)
type PostForm struct {
FieldNames []string
Fields map[string]string
Errors map[string]string
Moods map[string]int
MoodEmoji map[string]string
CurrentMood int
}
var MoodStates map[string]int
var MoodEmoji map[string]string
// DisplaySignUpForm displays the Sign Up form
func DisplayPostForm(w http.ResponseWriter, r *http.Request, p *PostForm) {
RenderTemplate(w, WebAppRoot+"/templates/postform.html", p)
}
func DisplayPostPreview(w http.ResponseWriter, r *http.Request, p *PostForm) {
moodState, _ := strconv.Atoi(p.Fields["mood"])
post := socialmedia.NewPost("Anonymous Gopher", socialmedia.MoodState(moodState), p.Fields["caption"], p.Fields["messageBody"], "", "", "", nil)
RenderTemplate(w, WebAppRoot+"/templates/socialmediapost.html", post)
}
func PopulatePostFormFields(r *http.Request, p *PostForm) {
for _, fieldName := range p.FieldNames {
p.Fields[fieldName] = r.FormValue(fieldName)
}
}
// ValidateSignUpForm validates the Sign Up form's fields
func ValidatePostForm(w http.ResponseWriter, r *http.Request, p *PostForm) {
p.CurrentMood, _ = strconv.Atoi(r.FormValue("mood"))
PopulatePostFormFields(r, p)
// Check if caption was filled out
if r.FormValue("caption") == "" {
p.Errors["captionError"] = "The caption field is required."
}
// Check if first name was filled out
if r.FormValue("messageBody") == "" {
p.Errors["messageBodyError"] = "The post message body is required."
}
if len(p.Errors) > 0 {
DisplayPostForm(w, r, p)
} else {
DisplayPostPreview(w, r, p)
}
}
func PostPreviewHandler(w http.ResponseWriter, r *http.Request) {
p := PostForm{}
p.FieldNames = []string{"caption", "messageBody", "mood"}
p.Fields = make(map[string]string)
p.Errors = make(map[string]string)
p.Moods = MoodStates
p.MoodEmoji = MoodEmoji
p.CurrentMood = 0
switch r.Method {
case "GET":
DisplayPostForm(w, r, &p)
case "POST":
ValidatePostForm(w, r, &p)
default:
DisplayPostPreview(w, r, &p)
}
}
func init() {
MoodStates = make(map[string]int)
MoodStates["Neutral"] = int(socialmedia.MoodStateNeutral)
MoodStates["Happy"] = int(socialmedia.MoodStateHappy)
MoodStates["Sad"] = int(socialmedia.MoodStateSad)
MoodStates["Angry"] = int(socialmedia.MoodStateAngry)
MoodStates["Hopeful"] = int(socialmedia.MoodStateHopeful)
MoodStates["Thrilled"] = int(socialmedia.MoodStateThrilled)
MoodStates["Bored"] = int(socialmedia.MoodStateBored)
MoodStates["Shy"] = int(socialmedia.MoodStateShy)
MoodStates["Comical"] = int(socialmedia.MoodStateComical)
MoodStates["On Cloud Nine"] = int(socialmedia.MoodStateOnCloudNine)
MoodEmoji = make(map[string]string)
MoodEmoji["Neutral"] = socialmedia.MoodsEmoji[socialmedia.MoodStateNeutral]
MoodEmoji["Happy"] = socialmedia.MoodsEmoji[socialmedia.MoodStateHappy]
MoodEmoji["Sad"] = socialmedia.MoodsEmoji[socialmedia.MoodStateSad]
MoodEmoji["Angry"] = socialmedia.MoodsEmoji[socialmedia.MoodStateAngry]
MoodEmoji["Hopeful"] = socialmedia.MoodsEmoji[socialmedia.MoodStateHopeful]
MoodEmoji["Thrilled"] = socialmedia.MoodsEmoji[socialmedia.MoodStateThrilled]
MoodEmoji["Bored"] = socialmedia.MoodsEmoji[socialmedia.MoodStateBored]
MoodEmoji["Shy"] = socialmedia.MoodsEmoji[socialmedia.MoodStateShy]
MoodEmoji["Comical"] = socialmedia.MoodsEmoji[socialmedia.MoodStateComical]
MoodEmoji["On Cloud Nine"] = socialmedia.MoodsEmoji[socialmedia.MoodStateOnCloudNine]
}