169 lines
3.2 KiB
Go
169 lines
3.2 KiB
Go
package web
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
"io/ioutil"
|
|
"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)
|
|
req := struct {
|
|
Content string
|
|
}{}
|
|
err := dec.Decode(&req)
|
|
if err != nil {
|
|
w.WriteHeader(500)
|
|
fmt.Fprint(w, err)
|
|
return
|
|
}
|
|
newEntry := entry.NewFromMd(web.db, req.Content)
|
|
|
|
oldEntry, err := entry.GetBySlug(web.db, slug)
|
|
if err != nil {
|
|
w.WriteHeader(500)
|
|
fmt.Fprint(w, err)
|
|
return
|
|
}
|
|
|
|
oldEntry.Content = newEntry.Content
|
|
oldEntry.Title = newEntry.Title
|
|
oldEntry.Slug = newEntry.UniqueSlug()
|
|
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
|
|
}
|
|
|
|
w.Header().Set("content-type", "application/json")
|
|
fmt.Fprint(w, string(resp))
|
|
}
|
|
|
|
func (web *Web) newMarkdownEntry(w http.ResponseWriter, r *http.Request) {
|
|
body, err := ioutil.ReadAll(r.Body)
|
|
if err != nil {
|
|
w.WriteHeader(500)
|
|
fmt.Fprint(w, err)
|
|
return
|
|
}
|
|
newEntry := entry.NewFromMd(web.db, string(body))
|
|
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) 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) {
|
|
query := ""
|
|
items, ok := r.URL.Query()["query"]
|
|
if ok {
|
|
query = items[0]
|
|
}
|
|
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 {
|
|
log.Error().Msgf("Error deleting: %s", err)
|
|
w.WriteHeader(500)
|
|
fmt.Fprint(w, err)
|
|
return
|
|
}
|
|
w.WriteHeader(200)
|
|
}
|