github.com/EngineerKamesh/gofullstack@v0.0.0-20180609171605-d41341d7d4ee/volume2/section4/gopherfaceform/handlers/postpreview.go (about)

     1  package handlers
     2  
     3  import (
     4  	"net/http"
     5  	"strconv"
     6  
     7  	"github.com/EngineerKamesh/gofullstack/volume2/section4/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  // DisplaySignUpForm displays the Sign Up form
    23  func DisplayPostForm(w http.ResponseWriter, r *http.Request, p *PostForm) {
    24  	RenderTemplate(w, "./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, "./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  }