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  }