github.com/lenfree/buffalo@v0.7.3-0.20170207163156-891616ea4064/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 // UsersResource allows CRUD with HTTP against the User model 12 type UsersResource struct { 13 buffalo.BaseResource 14 } 15 16 func findUserMW(h buffalo.Handler) buffalo.Handler { 17 return func(c buffalo.Context) error { 18 id, err := c.ParamInt("user_id") 19 if err == nil { 20 u := &models.User{} 21 tx := c.Get("tx").(*pop.Connection) 22 err = tx.Find(u, id) 23 if err != nil { 24 return c.Error(404, errors.WithStack(err)) 25 } 26 c.Set("user", u) 27 } 28 return h(c) 29 } 30 } 31 32 // List renders all users 33 func (ur *UsersResource) List(c buffalo.Context) error { 34 users := &models.Users{} 35 tx := c.Get("tx").(*pop.Connection) 36 err := tx.All(users) 37 if err != nil { 38 return c.Error(404, errors.WithStack(err)) 39 } 40 41 return c.Render(200, render.JSON(users)) 42 } 43 44 // Show renders a target user 45 func (ur *UsersResource) Show(c buffalo.Context) error { 46 return c.Render(200, render.JSON(c.Get("user"))) 47 } 48 49 // Create a user 50 func (ur *UsersResource) Create(c buffalo.Context) error { 51 u := &models.User{} 52 err := c.Bind(u) 53 if err != nil { 54 return errors.WithStack(err) 55 } 56 57 tx := c.Get("tx").(*pop.Connection) 58 verrs, err := u.ValidateNew(tx) 59 if err != nil { 60 return errors.WithStack(err) 61 } 62 if verrs.HasAny() { 63 c.Set("verrs", verrs.Errors) 64 return c.Render(422, render.JSON(verrs)) 65 } 66 err = tx.Create(u) 67 if err != nil { 68 return errors.WithStack(err) 69 } 70 71 return c.Render(201, render.JSON(u)) 72 } 73 74 // Update a target user 75 func (ur *UsersResource) Update(c buffalo.Context) error { 76 tx := c.Get("tx").(*pop.Connection) 77 u := c.Get("user").(*models.User) 78 79 err := c.Bind(u) 80 if err != nil { 81 return errors.WithStack(err) 82 } 83 84 verrs, err := u.ValidateUpdate(tx) 85 if err != nil { 86 return errors.WithStack(err) 87 } 88 if verrs.HasAny() { 89 c.Set("verrs", verrs.Errors) 90 return c.Render(422, render.JSON(verrs)) 91 } 92 err = tx.Update(u) 93 if err != nil { 94 return errors.WithStack(err) 95 } 96 97 err = tx.Reload(u) 98 if err != nil { 99 return errors.WithStack(err) 100 } 101 return c.Render(200, render.JSON(u)) 102 } 103 104 // Destroy removes a target user 105 func (ur *UsersResource) Destroy(c buffalo.Context) error { 106 tx := c.Get("tx").(*pop.Connection) 107 u := c.Get("user").(*models.User) 108 109 err := tx.Destroy(u) 110 if err != nil { 111 return errors.WithStack(err) 112 } 113 114 return c.Render(200, render.JSON(u)) 115 }