From 17e287d05538b4a7fd545d380771c1b1f426e059 Mon Sep 17 00:00:00 2001
From: Simon Lindblad <simon.lindblad93@gmail.com>
Date: Wed, 11 May 2016 21:36:20 +0200
Subject: [PATCH] Implement creation of lists

---
 todo.go | 20 ++++++++++++++++++++
 1 file changed, 20 insertions(+)

diff --git a/todo.go b/todo.go
index 438d84a..2066325 100644
--- a/todo.go
+++ b/todo.go
@@ -92,6 +92,14 @@ func getTasks(db *sql.DB, listId int) []Task {
     return res
 }
 
+func insertList(db *sql.DB, listName string) int {
+    var listId int
+    err := db.QueryRow("insert into list (name) values ($1) returning id", listName).Scan(&listId)
+    CheckFatal(err)
+
+    return listId
+}
+
 func insertTask(db *sql.DB, taskName string, listId int) {
     _, err := db.Exec("insert into task (name, list) values ($1, $2)", taskName, listId)
     // Handle non-existing list id
@@ -117,6 +125,18 @@ func (db *Database) listHandler(w http.ResponseWriter, r *http.Request) {
             tasks := getTasks(db.Db, listId)
             json.NewEncoder(w).Encode(&tasks)
         }
+    } else if r.Method == "POST" {
+        // Parse the request and create a new list
+        body, err := ioutil.ReadAll(r.Body)
+        CheckFatal(err)
+        listRequest := ListCreateRequest{}
+        err = json.Unmarshal(body, &listRequest)
+        CheckFatal(err)
+
+        listResponse := ListCreateResponse{}
+        listResponse.Id = insertList(db.Db, listRequest.Name)
+
+        json.NewEncoder(w).Encode(&listResponse)
     }
 }
 
-- 
GitLab