package web import ( "encoding/json" "fmt" "net/http" "time" "github.com/rs/zerolog/log" "code.chrissexton.org/cws/cabinet/entry" "github.com/gorilla/mux" ) func (web *Web) editEntry(w http.ResponseWriter, r *http.Request) { vars := mux.Vars(r) slug := vars["slug"] dec := json.NewDecoder(r.Body) newEntry := entry.New(web.db) err := dec.Decode(&newEntry) if err != nil { w.WriteHeader(500) fmt.Fprint(w, err) return } oldEntry, err := entry.GetBySlug(web.db, slug) if err != nil { w.WriteHeader(500) fmt.Fprint(w, err) return } oldEntry.Content = newEntry.Content oldEntry.Tags = newEntry.Tags oldEntry.Updated = time.Now() err = oldEntry.Update() if err != nil { w.WriteHeader(500) fmt.Fprint(w, err) return } resp, err := json.Marshal(oldEntry) if err != nil { w.WriteHeader(500) fmt.Fprint(w, err) return } log.Debug().Interface("oldEntry", oldEntry).Msg("Got a PUT") w.Header().Set("content-type", "application/json") fmt.Fprint(w, string(resp)) } func (web *Web) newEntry(w http.ResponseWriter, r *http.Request) { dec := json.NewDecoder(r.Body) newEntry := entry.New(web.db) err := dec.Decode(&newEntry) if err != nil { w.WriteHeader(500) fmt.Fprint(w, err) return } err = newEntry.Create() if err != nil { w.WriteHeader(500) fmt.Fprint(w, err) return } resp, err := json.Marshal(newEntry) if err != nil { w.WriteHeader(500) fmt.Fprint(w, err) return } w.Header().Set("content-type", "application/json") fmt.Fprint(w, string(resp)) } func (web *Web) allEntries(w http.ResponseWriter, r *http.Request) { r.ParseForm() query := r.Form.Get("query") entries, err := entry.Search(web.db, query) if err != nil { w.WriteHeader(500) fmt.Fprint(w, err) return } resp, err := json.Marshal(entries) if err != nil { w.WriteHeader(500) fmt.Fprint(w, err) return } w.Header().Set("content-type", "application/json") fmt.Fprint(w, string(resp)) } func (web *Web) getEntry(w http.ResponseWriter, r *http.Request) { vars := mux.Vars(r) slug := vars["slug"] entry, err := entry.GetBySlug(web.db, slug) if err != nil { w.WriteHeader(500) fmt.Fprint(w, err) return } resp, err := json.Marshal(entry) if err != nil { w.WriteHeader(500) fmt.Fprint(w, err) return } w.Header().Set("content-type", "application/json") fmt.Fprint(w, string(resp)) } func (web *Web) removeEntry(w http.ResponseWriter, r *http.Request) { vars := mux.Vars(r) slug := vars["slug"] err := entry.RemoveBySlug(web.db, slug) if err != nil { w.WriteHeader(500) fmt.Fprint(w, err) return } w.WriteHeader(200) }