// ServeHTTP is the http.Handler interface implementation func (c *DeleteAppHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { name, ok := mux.Vars(r)[appNamePath] if !ok { http.Error(w, jsonErrStr("app name not found in the path"), http.StatusBadRequest) return } if err := c.db.Delete(models.NewAppKey(name)); err != nil { http.Error(w, jsonErr(err, "DB error when trying to delete"), http.StatusInternalServerError) return } w.WriteHeader(http.StatusNoContent) }
// ServeHTTP is the http.Handler interface implementation func (c *CreateAppHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { a := &models.App{} if err := json.NewDecoder(r.Body).Decode(a); err != nil { http.Error(w, jsonErr(err, "couldn't decode JSON body"), http.StatusBadRequest) return } key := models.NewAppKey(a.Name) if err := c.db.Save(key, a); err != nil { http.Error(w, jsonErr(err, "couldn't save to the database"), http.StatusInternalServerError) return } w.WriteHeader(http.StatusCreated) w.Write([]byte(jsonKVP("status", "created"))) }
// ServeHTTP is the http.Handler interface implementation func (c *GetAppHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { name, ok := mux.Vars(r)[appNamePath] if !ok { http.Error(w, jsonErrStr("missing app name in path"), http.StatusBadRequest) return } app := &models.App{} err := c.db.Get(models.NewAppKey(name), app) if err == db.ErrNotFound { http.Error(w, jsonErrStr(fmt.Sprintf("app %s not found", name)), http.StatusNotFound) return } else if err != nil { http.Error(w, jsonErrStr(fmt.Sprintf("database error: %s", err)), http.StatusInternalServerError) return } if err := json.NewEncoder(w).Encode(app); err != nil { http.Error(w, jsonErr(err, "encoding json"), http.StatusInternalServerError) return } }