github.com/rotblauer/buffalo@v0.7.1-0.20170112214545-7aa55ef80dd3/examples/json-resource/actions/users.go (about) 1 package actions 2 3 import ( 4 "github.com/gobuffalo/buffalo" 5 "github.com/gobuffalo/buffalo/examples/json-resource/models" 6 "github.com/gobuffalo/buffalo/render" 7 "github.com/markbates/pop" 8 "github.com/pkg/errors" 9 ) 10 11 type UsersResource struct { 12 buffalo.BaseResource 13 } 14 15 func findUserMW(h buffalo.Handler) buffalo.Handler { 16 return func(c buffalo.Context) error { 17 id, err := c.ParamInt("user_id") 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 func (ur *UsersResource) List(c buffalo.Context) error { 32 users := &models.Users{} 33 tx := c.Get("tx").(*pop.Connection) 34 err := tx.All(users) 35 if err != nil { 36 return c.Error(404, errors.WithStack(err)) 37 } 38 39 return c.Render(200, render.JSON(users)) 40 } 41 42 func (ur *UsersResource) Show(c buffalo.Context) error { 43 return c.Render(200, render.JSON(c.Get("user"))) 44 } 45 46 func (ur *UsersResource) Create(c buffalo.Context) error { 47 u := &models.User{} 48 err := c.Bind(u) 49 if err != nil { 50 return errors.WithStack(err) 51 } 52 53 tx := c.Get("tx").(*pop.Connection) 54 verrs, err := u.ValidateNew(tx) 55 if err != nil { 56 return errors.WithStack(err) 57 } 58 if verrs.HasAny() { 59 c.Set("verrs", verrs.Errors) 60 return c.Render(422, render.JSON(verrs)) 61 } 62 err = tx.Create(u) 63 if err != nil { 64 return errors.WithStack(err) 65 } 66 67 return c.Render(201, render.JSON(u)) 68 } 69 70 func (ur *UsersResource) Update(c buffalo.Context) error { 71 tx := c.Get("tx").(*pop.Connection) 72 u := c.Get("user").(*models.User) 73 74 err := c.Bind(u) 75 if err != nil { 76 return errors.WithStack(err) 77 } 78 79 verrs, err := u.ValidateUpdate(tx) 80 if err != nil { 81 return errors.WithStack(err) 82 } 83 if verrs.HasAny() { 84 c.Set("verrs", verrs.Errors) 85 return c.Render(422, render.JSON(verrs)) 86 } 87 err = tx.Update(u) 88 if err != nil { 89 return errors.WithStack(err) 90 } 91 92 err = tx.Reload(u) 93 if err != nil { 94 return errors.WithStack(err) 95 } 96 return c.Render(200, render.JSON(u)) 97 } 98 99 func (ur *UsersResource) Destroy(c buffalo.Context) error { 100 tx := c.Get("tx").(*pop.Connection) 101 u := c.Get("user").(*models.User) 102 103 err := tx.Destroy(u) 104 if err != nil { 105 return errors.WithStack(err) 106 } 107 108 return c.Render(200, render.JSON(u)) 109 }