github.com/rotblauer/buffalo@v0.7.1-0.20170112214545-7aa55ef80dd3/examples/html-crud/actions/users.go (about) 1 package actions 2 3 import ( 4 "github.com/gobuffalo/buffalo" 5 "github.com/gobuffalo/buffalo/examples/html-crud/models" 6 "github.com/markbates/pop" 7 "github.com/pkg/errors" 8 ) 9 10 func findUserMW(h buffalo.Handler) buffalo.Handler { 11 return func(c buffalo.Context) error { 12 id, err := c.ParamInt("user_id") 13 if err == nil { 14 u := &models.User{} 15 tx := c.Get("tx").(*pop.Connection) 16 err = tx.Find(u, id) 17 if err != nil { 18 return c.Error(404, errors.WithStack(err)) 19 } 20 c.Set("user", u) 21 } 22 return h(c) 23 } 24 } 25 26 func UsersList(c buffalo.Context) error { 27 users := &models.Users{} 28 tx := c.Get("tx").(*pop.Connection) 29 err := tx.All(users) 30 if err != nil { 31 return c.Error(404, errors.WithStack(err)) 32 } 33 34 c.Set("users", users) 35 return c.Render(200, r.HTML("users/index.html")) 36 } 37 38 func UsersShow(c buffalo.Context) error { 39 return c.Render(200, r.HTML("users/show.html")) 40 } 41 42 func UsersNew(c buffalo.Context) error { 43 c.Set("user", models.User{}) 44 return c.Render(200, r.HTML("users/new.html")) 45 } 46 47 func UsersCreate(c buffalo.Context) error { 48 u := &models.User{} 49 err := c.Bind(u) 50 if err != nil { 51 return errors.WithStack(err) 52 } 53 54 tx := c.Get("tx").(*pop.Connection) 55 verrs, err := u.ValidateNew(tx) 56 if err != nil { 57 return errors.WithStack(err) 58 } 59 if verrs.HasAny() { 60 c.Set("verrs", verrs.Errors) 61 c.Set("user", u) 62 return c.Render(422, r.HTML("users/new.html")) 63 } 64 err = tx.Create(u) 65 if err != nil { 66 return errors.WithStack(err) 67 } 68 69 return c.Redirect(301, "/users/%d", u.ID) 70 } 71 72 func UsersEdit(c buffalo.Context) error { 73 return c.Render(200, r.HTML("users/edit.html")) 74 } 75 76 func UsersUpdate(c buffalo.Context) error { 77 tx := c.Get("tx").(*pop.Connection) 78 u := c.Get("user").(*models.User) 79 80 err := c.Bind(u) 81 if err != nil { 82 return errors.WithStack(err) 83 } 84 85 verrs, err := u.ValidateUpdate(tx) 86 if err != nil { 87 return errors.WithStack(err) 88 } 89 if verrs.HasAny() { 90 c.Set("verrs", verrs.Errors) 91 c.Set("user", u) 92 return c.Render(422, r.HTML("users/edit.html")) 93 } 94 err = tx.Update(u) 95 if err != nil { 96 return errors.WithStack(err) 97 } 98 99 err = tx.Reload(u) 100 if err != nil { 101 return errors.WithStack(err) 102 } 103 return c.Redirect(301, "/users/%d", u.ID) 104 } 105 106 func UsersDelete(c buffalo.Context) error { 107 tx := c.Get("tx").(*pop.Connection) 108 u := c.Get("user").(*models.User) 109 110 err := tx.Destroy(u) 111 if err != nil { 112 return errors.WithStack(err) 113 } 114 115 return c.Redirect(301, "/users") 116 }