github.com/jamiefdhurst/journal@v0.9.2/internal/app/controller/apiv1/create.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 // Create Create a new entry via API 13 type Create struct { 14 controller.Super 15 } 16 17 // Run Create action 18 func (c *Create) Run(response http.ResponseWriter, request *http.Request) { 19 container := c.Super.Container.(*app.Container) 20 if !container.Configuration.EnableCreate { 21 response.WriteHeader(http.StatusForbidden) 22 return 23 } 24 25 decoder := json.NewDecoder(request.Body) 26 var journalRequest = journalFromJSON{} 27 err := decoder.Decode(&journalRequest) 28 if err != nil { 29 response.WriteHeader(http.StatusBadRequest) 30 } else { 31 if journalRequest.Title == "" || journalRequest.Content == "" || journalRequest.Date == "" { 32 response.WriteHeader(http.StatusBadRequest) 33 } else { 34 journal := model.Journal{ID: 0, Slug: model.Slugify(journalRequest.Title), Title: journalRequest.Title, Date: journalRequest.Date, Content: journalRequest.Content} 35 js := model.Journals{Container: container, Gs: model.GiphyAdapter(container)} 36 journal = js.Save(journal) 37 response.WriteHeader(http.StatusCreated) 38 encoder := json.NewEncoder(response) 39 encoder.SetEscapeHTML(false) 40 encoder.Encode(journal) 41 } 42 } 43 }