From 642a71b941aa382b1e7a42e7e378452007373cda Mon Sep 17 00:00:00 2001 From: Grant Ammons Date: Sun, 12 Jun 2016 13:36:54 -0400 Subject: Add the webapp --- todo.go | 4 ++++ todolist/webapp.go | 66 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 70 insertions(+) create mode 100644 todolist/webapp.go diff --git a/todo.go b/todo.go index cc5c0ad..3beccc8 100644 --- a/todo.go +++ b/todo.go @@ -126,5 +126,9 @@ func routeInput(command string, input string) { app.EditTodoDue(input) case "init": app.InitializeRepo() + case "web": + web := todolist.NewWebapp() + fmt.Println("Now serving todolist web.\nHead to http://localhost:7890 to see your todo list!") + web.Run() } } diff --git a/todolist/webapp.go b/todolist/webapp.go new file mode 100644 index 0000000..29918bf --- /dev/null +++ b/todolist/webapp.go @@ -0,0 +1,66 @@ +package todolist + +import ( + "encoding/json" + "fmt" + "log" + "net/http" + + "github.com/julienschmidt/httprouter" +) + +type Webapp struct { + Router *httprouter.Router +} + +func NewWebapp() *Webapp { + return &Webapp{Router: setupRoutes()} +} + +func (w *Webapp) Run() { + log.Fatal(http.ListenAndServe(":7890", w.Router)) +} + +func setupRoutes() *httprouter.Router { + router := httprouter.New() + router.GET("/", Scaffold) + router.OPTIONS("/todos", TodoOptions) + router.GET("/todos", GetTodos) + router.POST("/todos", SaveTodos) + return router +} + +func Scaffold(w http.ResponseWriter, r *http.Request, _ httprouter.Params) { + template := ` + +

you are here buddy

+ + ` + fmt.Fprintf(w, template) +} + +func GetTodos(w http.ResponseWriter, r *http.Request, _ httprouter.Params) { + w.Header().Set("Access-Control-Allow-Origin", "*") + app := NewApp() + app.Load() + json, _ := json.Marshal(app.TodoList.Data) + fmt.Fprintf(w, string(json)) +} +func TodoOptions(w http.ResponseWriter, r *http.Request, _ httprouter.Params) { + w.Header().Set("Access-Control-Allow-Headers", "*") + w.Header().Set("Access-Control-Allow-Origin", "*") + fmt.Fprintf(w, "") +} + +func SaveTodos(w http.ResponseWriter, r *http.Request, _ httprouter.Params) { + w.Header().Set("Access-Control-Allow-Headers", "*") + w.Header().Set("Access-Control-Allow-Origin", "*") + decoder := json.NewDecoder(r.Body) + var todos []*Todo + err := decoder.Decode(&todos) + if err != nil { + log.Fatal("encountered an error parsing json, ", err) + } + app := NewApp() + app.TodoStore.Save(todos) +} -- cgit v1.3