diff options
-rw-r--r-- | controller/recipe.go | 48 | ||||
-rw-r--r-- | model/object.go | 15 | ||||
-rw-r--r-- | view/recipe.go | 16 |
3 files changed, 23 insertions, 56 deletions
diff --git a/controller/recipe.go b/controller/recipe.go index da58d35..9427b0d 100644 --- a/controller/recipe.go +++ b/controller/recipe.go @@ -18,20 +18,8 @@ func RecipeCreate(w http.ResponseWriter, r *http.Request) { recipe.LastChanged = fmt.Sprint(time.Now().Unix()) recipe.Created = recipe.LastChanged - tx, err := model.NewTx() - if err != nil { - http.Error(w, err.Error(), http.StatusInternalServerError) - return - } - - err = recipe.Create(tx) - if err != nil { - model.Rollback(tx) - http.Error(w, err.Error(), http.StatusInternalServerError) - return - } - - err = tx.Commit() + var obj model.Object = &recipe + err := model.SafeCrud(obj.Create) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return @@ -61,20 +49,8 @@ func RecipeUpdate(w http.ResponseWriter, r *http.Request) { recipe.LastChanged = fmt.Sprint(time.Now().Unix()) - tx, err := model.NewTx() - if err != nil { - http.Error(w, err.Error(), http.StatusInternalServerError) - return - } - - err = recipe.Update(tx) - if err != nil { - model.Rollback(tx) - http.Error(w, err.Error(), http.StatusInternalServerError) - return - } - - err = tx.Commit() + var obj model.Object = &recipe + err = model.SafeCrud(obj.Update) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return @@ -87,20 +63,8 @@ func RecipeDelete(w http.ResponseWriter, r *http.Request) { recipe := model.Recipe{} recipe.Id = mux.Vars(r)[`id`] - tx, err := model.NewTx() - if err != nil { - http.Error(w, err.Error(), http.StatusInternalServerError) - return - } - - err = recipe.Delete(tx) - if err != nil { - model.Rollback(tx) - http.Error(w, err.Error(), http.StatusInternalServerError) - return - } - - err = tx.Commit() + var obj model.Object = &recipe + err := model.SafeCrud(obj.Delete) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return diff --git a/model/object.go b/model/object.go index 63ef419..bcbba3e 100644 --- a/model/object.go +++ b/model/object.go @@ -10,3 +10,18 @@ type Object interface { Update(tx *sql.Tx) error Delete(tx *sql.Tx) error } + +func SafeCrud(crud func(tx *sql.Tx) error) error { + tx, err := NewTx() + if err != nil { + return err + } + + err = crud(tx) + if err != nil { + Rollback(tx) + return err + } + + return tx.Commit() +} diff --git a/view/recipe.go b/view/recipe.go index 52b7a7e..ba670a2 100644 --- a/view/recipe.go +++ b/view/recipe.go @@ -12,20 +12,8 @@ func RecipeRead(w http.ResponseWriter, r *http.Request) { recipe := model.Recipe{} recipe.Id = mux.Vars(r)[`id`] - tx, err := model.NewTx() - if err != nil { - http.Error(w, err.Error(), http.StatusInternalServerError) - return - } - - err = recipe.Read(tx) - if err != nil { - model.Rollback(tx) - http.Error(w, err.Error(), http.StatusInternalServerError) - return - } - - err = tx.Commit() + var obj model.Object = &recipe + err := model.SafeCrud(obj.Read) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return |