github.com/jasonish/buffalo@v0.8.2-0.20170413145823-bacbdd415f1b/examples/json-crud/actions/users.go (about) 1 package actions 2 3 import ( 4 "github.com/gobuffalo/buffalo" 5 "github.com/gobuffalo/buffalo/examples/json-crud/models" 6 "github.com/gobuffalo/buffalo/render" 7 "github.com/markbates/pop" 8 "github.com/pkg/errors" 9 ) 10 11 func findUserMW(h buffalo.Handler) buffalo.Handler { 12 return func(c buffalo.Context) error { 13 id, err := c.ParamInt("user_id") 14 if err == nil { 15 u := &models.User{} 16 tx := c.Get("tx").(*pop.Connection) 17 err = tx.Find(u, id) 18 if err != nil { 19 return c.Error(404, errors.WithStack(err)) 20 } 21 c.Set("user", u) 22 } 23 return h(c) 24 } 25 } 26 27 // UsersList returns all user data in JSON 28 func UsersList(c buffalo.Context) error { 29 users := &models.Users{} 30 tx := c.Get("tx").(*pop.Connection) 31 err := tx.All(users) 32 if err != nil { 33 return c.Error(404, errors.WithStack(err)) 34 } 35 36 return c.Render(200, render.JSON(users)) 37 } 38 39 // UsersShow renders one user's JSON data 40 func UsersShow(c buffalo.Context) error { 41 return c.Render(200, render.JSON(c.Get("user"))) 42 } 43 44 // UsersCreate creates a user 45 func UsersCreate(c buffalo.Context) error { 46 u := &models.User{} 47 err := c.Bind(u) 48 if err != nil { 49 return errors.WithStack(err) 50 } 51 52 tx := c.Get("tx").(*pop.Connection) 53 verrs, err := u.ValidateNew(tx) 54 if err != nil { 55 return errors.WithStack(err) 56 } 57 if verrs.HasAny() { 58 c.Set("verrs", verrs.Errors) 59 return c.Render(422, render.JSON(verrs)) 60 } 61 err = tx.Create(u) 62 if err != nil { 63 return errors.WithStack(err) 64 } 65 66 return c.Render(201, render.JSON(u)) 67 } 68 69 // UsersUpdate updates a target user account data 70 func UsersUpdate(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 // UsersDelete deletes a target user account 100 func UsersDelete(c buffalo.Context) error { 101 tx := c.Get("tx").(*pop.Connection) 102 u := c.Get("user").(*models.User) 103 104 err := tx.Destroy(u) 105 if err != nil { 106 return errors.WithStack(err) 107 } 108 109 return c.Render(200, render.JSON(u)) 110 }