github.com/EngineerKamesh/gofullstack@v0.0.0-20180609171605-d41341d7d4ee/volume3/section5/gopherface/handlers/postpreview.go (about) 1 package handlers 2 3 import ( 4 "net/http" 5 "strconv" 6 7 "github.com/EngineerKamesh/gofullstack/volume3/section5/gopherface/models/socialmedia" 8 ) 9 10 type PostForm struct { 11 FieldNames []string 12 Fields map[string]string 13 Errors map[string]string 14 Moods map[string]int 15 MoodEmoji map[string]string 16 CurrentMood int 17 } 18 19 var MoodStates map[string]int 20 var MoodEmoji map[string]string 21 22 // DisplaySignUpForm displays the Sign Up form 23 func DisplayPostForm(w http.ResponseWriter, r *http.Request, p *PostForm) { 24 RenderTemplate(w, WebAppRoot+"/templates/postform.html", p) 25 } 26 27 func DisplayPostPreview(w http.ResponseWriter, r *http.Request, p *PostForm) { 28 29 moodState, _ := strconv.Atoi(p.Fields["mood"]) 30 post := socialmedia.NewPost("Anonymous Gopher", socialmedia.MoodState(moodState), p.Fields["caption"], p.Fields["messageBody"], "", "", "", nil) 31 RenderTemplate(w, WebAppRoot+"/templates/socialmediapost.html", post) 32 } 33 34 func PopulatePostFormFields(r *http.Request, p *PostForm) { 35 36 for _, fieldName := range p.FieldNames { 37 p.Fields[fieldName] = r.FormValue(fieldName) 38 } 39 40 } 41 42 // ValidateSignUpForm validates the Sign Up form's fields 43 func ValidatePostForm(w http.ResponseWriter, r *http.Request, p *PostForm) { 44 45 p.CurrentMood, _ = strconv.Atoi(r.FormValue("mood")) 46 47 PopulatePostFormFields(r, p) 48 // Check if caption was filled out 49 if r.FormValue("caption") == "" { 50 p.Errors["captionError"] = "The caption field is required." 51 } 52 53 // Check if first name was filled out 54 if r.FormValue("messageBody") == "" { 55 p.Errors["messageBodyError"] = "The post message body is required." 56 } 57 58 if len(p.Errors) > 0 { 59 DisplayPostForm(w, r, p) 60 } else { 61 DisplayPostPreview(w, r, p) 62 } 63 64 } 65 66 func PostPreviewHandler(w http.ResponseWriter, r *http.Request) { 67 68 p := PostForm{} 69 p.FieldNames = []string{"caption", "messageBody", "mood"} 70 p.Fields = make(map[string]string) 71 p.Errors = make(map[string]string) 72 p.Moods = MoodStates 73 p.MoodEmoji = MoodEmoji 74 p.CurrentMood = 0 75 76 switch r.Method { 77 78 case "GET": 79 DisplayPostForm(w, r, &p) 80 case "POST": 81 ValidatePostForm(w, r, &p) 82 default: 83 DisplayPostPreview(w, r, &p) 84 } 85 86 } 87 88 func init() { 89 90 MoodStates = make(map[string]int) 91 MoodStates["Neutral"] = int(socialmedia.MoodStateNeutral) 92 MoodStates["Happy"] = int(socialmedia.MoodStateHappy) 93 MoodStates["Sad"] = int(socialmedia.MoodStateSad) 94 MoodStates["Angry"] = int(socialmedia.MoodStateAngry) 95 MoodStates["Hopeful"] = int(socialmedia.MoodStateHopeful) 96 MoodStates["Thrilled"] = int(socialmedia.MoodStateThrilled) 97 MoodStates["Bored"] = int(socialmedia.MoodStateBored) 98 MoodStates["Shy"] = int(socialmedia.MoodStateShy) 99 MoodStates["Comical"] = int(socialmedia.MoodStateComical) 100 MoodStates["On Cloud Nine"] = int(socialmedia.MoodStateOnCloudNine) 101 102 MoodEmoji = make(map[string]string) 103 MoodEmoji["Neutral"] = socialmedia.MoodsEmoji[socialmedia.MoodStateNeutral] 104 MoodEmoji["Happy"] = socialmedia.MoodsEmoji[socialmedia.MoodStateHappy] 105 MoodEmoji["Sad"] = socialmedia.MoodsEmoji[socialmedia.MoodStateSad] 106 MoodEmoji["Angry"] = socialmedia.MoodsEmoji[socialmedia.MoodStateAngry] 107 MoodEmoji["Hopeful"] = socialmedia.MoodsEmoji[socialmedia.MoodStateHopeful] 108 MoodEmoji["Thrilled"] = socialmedia.MoodsEmoji[socialmedia.MoodStateThrilled] 109 MoodEmoji["Bored"] = socialmedia.MoodsEmoji[socialmedia.MoodStateBored] 110 MoodEmoji["Shy"] = socialmedia.MoodsEmoji[socialmedia.MoodStateShy] 111 MoodEmoji["Comical"] = socialmedia.MoodsEmoji[socialmedia.MoodStateComical] 112 MoodEmoji["On Cloud Nine"] = socialmedia.MoodsEmoji[socialmedia.MoodStateOnCloudNine] 113 114 }