52 lines
1.1 KiB
Go
52 lines
1.1 KiB
Go
package main
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
"log"
|
|
"net/http"
|
|
)
|
|
|
|
type NewMemoResponse struct {
|
|
ID int64 `json:"ID"`
|
|
}
|
|
|
|
func httpGetMemos(w http.ResponseWriter, r *http.Request) {
|
|
memos := getMemos(DB)
|
|
w.Header().Set("Content-Type", "application/json")
|
|
err := json.NewEncoder(w).Encode(memos)
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
}
|
|
|
|
func httpCreateMemo(w http.ResponseWriter, r *http.Request) {
|
|
if err := r.ParseForm(); err != nil {
|
|
w.WriteHeader(400)
|
|
fmt.Fprintf(w, "ParseForm() err: %v", err)
|
|
return
|
|
}
|
|
message := r.FormValue("message")
|
|
if len(message) == 0 {
|
|
w.Header().Set("Content-Type", "application/json")
|
|
w.WriteHeader(422)
|
|
json.NewEncoder(w).Encode(ErrorResponse{"Memo must have a Message"})
|
|
return
|
|
}
|
|
id := insertMemo(DB, message)
|
|
w.Header().Set("Content-Type", "application/json")
|
|
json.NewEncoder(w).Encode(NewMemoResponse{id})
|
|
}
|
|
|
|
func memosEndpoint(w http.ResponseWriter, r *http.Request) {
|
|
switch r.Method {
|
|
case "GET":
|
|
httpGetMemos(w, r)
|
|
case "POST":
|
|
httpCreateMemo(w, r)
|
|
default:
|
|
w.WriteHeader(405)
|
|
fmt.Fprintf(w, "HTTP method must be GET or POST")
|
|
}
|
|
}
|