aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--todo.go4
-rw-r--r--todolist/webapp.go66
2 files changed, 70 insertions, 0 deletions
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 := `
+ <html>
+ <h1>you are here buddy</h1>
+ </html>
+ `
+ 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)
+}