github.com/jamiefdhurst/journal@v0.9.2/internal/app/controller/apiv1/update.go (about) 1 package apiv1 2 3 import ( 4 "encoding/json" 5 "net/http" 6 7 "github.com/jamiefdhurst/journal/internal/app" 8 "github.com/jamiefdhurst/journal/internal/app/model" 9 "github.com/jamiefdhurst/journal/pkg/controller" 10 ) 11 12 // Update Update an existing entry via API 13 type Update struct { 14 controller.Super 15 } 16 17 // Run Update action 18 func (c *Update) Run(response http.ResponseWriter, request *http.Request) { 19 container := c.Super.Container.(*app.Container) 20 if !container.Configuration.EnableEdit { 21 response.WriteHeader(http.StatusForbidden) 22 return 23 } 24 25 js := model.Journals{Container: container, Gs: model.GiphyAdapter(container)} 26 journal := js.FindBySlug(c.Params[1]) 27 28 response.Header().Add("Content-Type", "application/json") 29 if journal.ID == 0 { 30 response.WriteHeader(http.StatusNotFound) 31 } else { 32 var journalRequest = journalFromJSON{} 33 decoder := json.NewDecoder(request.Body) 34 err := decoder.Decode(&journalRequest) 35 if err != nil { 36 response.WriteHeader(http.StatusBadRequest) 37 } else { 38 // Update only fields that are present 39 if journalRequest.Title != "" { 40 journal.Title = journalRequest.Title 41 } 42 if journalRequest.Date != "" { 43 journal.Date = journalRequest.Date 44 } 45 if journalRequest.Content != "" { 46 journal.Content = journalRequest.Content 47 } 48 journal = js.Save(journal) 49 encoder := json.NewEncoder(response) 50 encoder.SetEscapeHTML(false) 51 encoder.Encode(journal) 52 } 53 } 54 }