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  }