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