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