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  }