func HandleGoalPost(w http.ResponseWriter, r *http.Request) { c := appengine.NewContext(r) goal := model.Goal{} if err := json.NewDecoder(r.Body).Decode(&goal); err != nil { http.Error(w, err.Error(), http.StatusBadRequest) return } // if record already exists with the same goal name, then return goalSrc := model.Goal{} goalSrc.Name = goal.Name if err := goalSrc.Get(c); err == types.ErrorNoMatch { // do nothing } else if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } else { http.Error(w, "record already exists", http.StatusBadRequest) return } goal.CreatedOn = time.Now() if err := goal.Put(c); err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } if err := json.NewEncoder(w).Encode(goal); err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } w.WriteHeader(http.StatusCreated) }