Skip to content

Commit

Permalink
add done handler
Browse files Browse the repository at this point in the history
  • Loading branch information
zemirco committed Jan 23, 2016
1 parent e8d9167 commit e1c9c51
Show file tree
Hide file tree
Showing 3 changed files with 41 additions and 6 deletions.
24 changes: 19 additions & 5 deletions database.go
Original file line number Diff line number Diff line change
Expand Up @@ -90,16 +90,30 @@ func (d Database) GetTodos(database string) ([]item.Todo, error) {
return todos, json.Unmarshal(b, &todos)
}

func (d Database) GetTodoByID(database, id string) (item.Todo, error) {
db := d.Client.Use(database)
var t item.Todo
return t, db.Get(&t, id)
}

func (d Database) UpdateTodo(database string, todo item.Todo) error {
db := d.Client.Use(database)
_, err := db.Put(&todo)
if err != nil {
return fmt.Errorf("put todo: %v", err)
}
return nil
}

func (d Database) DeleteTodoByID(database, id string) error {
db := d.Client.Use(database)
doc := couchdb.Document{}
// get document first to retrieve current revision
if err := db.Get(&doc, id); err != nil {
return fmt.Errorf("get document: %v", err)
doc, err := d.GetTodoByID(database, id)
if err != nil {
return fmt.Errorf("get todo by id: %v", err)
}
// delete document by id and revision
_, err := db.Delete(&doc)
if err != nil {
if _, err = db.Delete(&doc); err != nil {
return fmt.Errorf("delete document: %v", err)
}
return nil
Expand Down
2 changes: 1 addition & 1 deletion index.html
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@
</thead>
<tbody>
{{ range $index, $item := .Data.Todos }}
<tr>
<tr {{ if $item.Done }}class="success"{{ end }}>
<td>
{{ add $index 1 }}
</td>
Expand Down
21 changes: 21 additions & 0 deletions main.go
Original file line number Diff line number Diff line change
Expand Up @@ -167,3 +167,24 @@ func DeleteHandler(w http.ResponseWriter, r *http.Request) *appError {
http.Redirect(w, r, "/", http.StatusSeeOther)
return nil
}

func DoneHandler(w http.ResponseWriter, r *http.Request) *appError {
vars := mux.Vars(r)
id := vars["id"]
// get username from session
session, err := RediStore.Get(r, "session")
if err != nil {
return InternalServerError(fmt.Errorf("get session from redistore: %v", err))
}
username := session.Values["username"].(string)
t, err := db.GetTodoByID(username, id)
if err != nil {
return InternalServerError(fmt.Errorf("get todo by id: %v", err))
}
t.Done = true
if err := db.UpdateTodo(username, t); err != nil {
return InternalServerError(fmt.Errorf("update todo: %v", err))
}
http.Redirect(w, r, "/", http.StatusSeeOther)
return nil
}

0 comments on commit e1c9c51

Please sign in to comment.