diff --git a/todo/list.go b/todo/list.go index 80ba9d2..c45b3dc 100644 --- a/todo/list.go +++ b/todo/list.go @@ -1,10 +1,14 @@ package todo -import ( - "errors" -) +type UserError struct { + message string +} + +var ErrorBadId = &UserError{"bad todoItemId"} -var ErrorBadId = errors.New("bad todoItemId") +func (ue *UserError) Error() string { + return ue.message +} type Item struct { Title string diff --git a/web/handlers.go b/web/handlers.go index 151f5a8..2e0ab10 100644 --- a/web/handlers.go +++ b/web/handlers.go @@ -1,7 +1,6 @@ package web import ( - "errors" "github.com/xpmatteo/todomvc-golang/todo" "html/template" "log" @@ -53,12 +52,8 @@ func NewItemHandler(templ *template.Template, repository Repository) http.Handle model.Add(title, nil) return nil }) - if errors.Is(err, todo.ErrorBadId) { - badRequest(w, err) - return - } if err != nil { - internalServerError(w, err) + handleError(w, err) return } @@ -83,12 +78,8 @@ func ToggleHandler(templ *template.Template, repository Repository) http.Handler model, err := with(repository, func(model *todo.List) error { return model.Toggle(id) }) - if errors.Is(err, todo.ErrorBadId) { - badRequest(w, err) - return - } if err != nil { - internalServerError(w, err) + handleError(w, err) return } vm := viewModel(model, r) @@ -96,6 +87,16 @@ func ToggleHandler(templ *template.Template, repository Repository) http.Handler }) } +//goland:noinspection GoTypeAssertionOnErrors +func handleError(w http.ResponseWriter, err error) { + switch err.(type) { + case *todo.UserError: + badRequest(w, err) + default: + internalServerError(w, err) + } +} + func EditHandler(templ *template.Template, repository Repository) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { err := r.ParseForm() @@ -113,12 +114,8 @@ func EditHandler(templ *template.Template, repository Repository) http.Handler { model, err := with(repository, func(model *todo.List) error { return model.Edit(id, title) }) - if errors.Is(err, todo.ErrorBadId) { - badRequest(w, err) - return - } if err != nil { - internalServerError(w, err) + handleError(w, err) return } @@ -144,7 +141,7 @@ func DestroyHandler(templ *template.Template, repository Repository) http.Handle return model.Destroy(id) }) if err != nil { - internalServerError(w, err) + handleError(w, err) return }