62 lines
1.2 KiB
Go
62 lines
1.2 KiB
Go
package handlers
|
|
|
|
import (
|
|
"net/http"
|
|
|
|
"github.com/google/uuid"
|
|
"michaelthomson.dev/mthomson/go-todos-app/services"
|
|
"michaelthomson.dev/mthomson/go-todos-app/templates/partials"
|
|
)
|
|
|
|
type TodoHandler struct {
|
|
ts services.TodoService
|
|
}
|
|
|
|
func NewTodoHandler(ts services.TodoService) TodoHandler {
|
|
return TodoHandler{ts: ts}
|
|
}
|
|
|
|
func (h TodoHandler) Create(w http.ResponseWriter, r *http.Request) {
|
|
var err error
|
|
err = r.ParseForm()
|
|
|
|
if err != nil {
|
|
http.Error(w, err.Error(), http.StatusInternalServerError)
|
|
return
|
|
}
|
|
|
|
name := r.FormValue("name")
|
|
|
|
addedTodo, err := h.ts.AddTodo(name)
|
|
|
|
if err != nil {
|
|
http.Error(w, err.Error(), http.StatusInternalServerError)
|
|
return
|
|
}
|
|
|
|
err = partials.Todo(addedTodo).Render(r.Context(), w)
|
|
|
|
if err != nil {
|
|
http.Error(w, err.Error(), http.StatusInternalServerError)
|
|
return
|
|
}
|
|
}
|
|
|
|
func (h TodoHandler) Delete(w http.ResponseWriter, r *http.Request) {
|
|
var err error
|
|
|
|
id, err := uuid.Parse(r.PathValue("id"))
|
|
|
|
if err != nil {
|
|
http.Error(w, err.Error(), http.StatusBadRequest)
|
|
return
|
|
}
|
|
|
|
err = h.ts.DeleteTodoById(id)
|
|
|
|
if err != nil {
|
|
http.Error(w, err.Error(), http.StatusInternalServerError)
|
|
return
|
|
}
|
|
}
|