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  }