track-me/moments.go

56 lines
996 B
Go

package main
import (
"encoding/json"
"go.etcd.io/bbolt"
"log"
"net/http"
"time"
)
type momentHandler struct {
DB *bbolt.DB
}
func (mh *momentHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
defer r.Body.Close()
sess, err := NewSession(w, r)
if err != nil {
log.Println(err)
return
}
defer sess.Flush()
if r.Method == http.MethodGet {
moments, err := loadMoments(mh.DB, "")
if err != nil {
log.Println(err)
}
w.Header().Add("Content-Type", "application/json; charset=utf8")
err = json.NewEncoder(w).Encode(&moments)
if err != nil {
log.Println(err)
}
} else if r.Method == http.MethodPost {
// save input values
err := r.ParseForm()
if err != nil {
log.Println(err)
return
}
memo := r.FormValue("memo")
timestamp := time.Now()
err = saveMemo(mh.DB, timestamp, memo)
if err != nil {
log.Println(err)
}
http.Redirect(w, r, "/", http.StatusFound)
} else {
http.Error(w, "Method Not Allowed", 405)
return
}
}