package main import ( "net/http" "todo/templates" "todo/models" "strconv" "github.com/go-chi/chi" ) var store = MustNewDB() func indexHandler(w http.ResponseWriter, r *http.Request) { todos, err := store.GetTodos() if err != nil { templates.WritePage(w, &templates.Error500Page{"Error al intentar obtener todos los TODO", err.Error()}) return } templates.WritePage(w, &templates.IndexPage{todos}) } func createHandler(w http.ResponseWriter, r *http.Request) { r.ParseForm() todo := models.Todo{Id: 0, Todo: r.FormValue("todo"), Done: false} err := store.CreateTodo(todo) if err != nil { templates.WritePage(w, &templates.Error500Page{"Error al intentar crear un nuevo TODO", err.Error()}) return } http.Redirect(w, r, "/", http.StatusSeeOther) } func toggleHandler(w http.ResponseWriter, r *http.Request) { id, err := strconv.Atoi(chi.URLParam(r, "id")) if err != nil { templates.WritePage(w, &templates.Error500Page{"El id entregado es invalido", err.Error()}) return } err = store.ToggleTodo(id) if err != nil { templates.WritePage(w, &templates.Error500Page{"Error al actualizar el TODO", err.Error()}) return } http.Redirect(w, r, "/", http.StatusSeeOther) } func deleteHandler(w http.ResponseWriter, r *http.Request) { id, err := strconv.Atoi(chi.URLParam(r, "id")) if err != nil { templates.WritePage(w, &templates.Error500Page{"El id entregado es invalido", err.Error()}) return } err = store.DeleteTodo(id) if err != nil { templates.WritePage(w, &templates.Error500Page{"Error al eliminar el TODO", err.Error()}) return } http.Redirect(w, r, "/", http.StatusSeeOther) } func editHandler(w http.ResponseWriter, r *http.Request) { id, err := strconv.Atoi(chi.URLParam(r, "id")) if err != nil { templates.WritePage(w, &templates.Error500Page{"El id entregado es invalido", err.Error()}) return } todos, err := store.GetTodos() if err != nil { templates.WritePage(w, &templates.Error500Page{"Error al intentar obtener todos los TODO", err.Error()}) return } editingTodo, err := store.GetTodo(id) if err != nil { templates.WritePage(w, &templates.Error500Page{"Error al intentar obtener un TODO", err.Error()}) return } templates.WritePage(w, &templates.EditPage{todos, editingTodo}) } func updateHandler(w http.ResponseWriter, r *http.Request) { r.ParseForm() id, err := strconv.Atoi(chi.URLParam(r, "id")) if err != nil { templates.WritePage(w, &templates.Error500Page{"El id entregado es invalido", err.Error()}) return } message := r.FormValue("todo") todo := models.Todo{Id: id, Todo: message } err = store.UpdateTodo(todo) if err != nil { templates.WritePage(w, &templates.Error500Page{"Error al intentar actualizar un TODO", err.Error()}) return } http.Redirect(w, r, "/", http.StatusSeeOther) }