github.com/rotblauer/buffalo@v0.7.1-0.20170112214545-7aa55ef80dd3/examples/html-resource/actions/users.go (about)

     1  package actions
     2  
     3  import (
     4  	"github.com/gobuffalo/buffalo"
     5  	"github.com/gobuffalo/buffalo/examples/html-resource/models"
     6  	"github.com/markbates/pop"
     7  	"github.com/pkg/errors"
     8  )
     9  
    10  type UsersResource struct {
    11  	buffalo.BaseResource
    12  }
    13  
    14  func findUserMW(n string) buffalo.MiddlewareFunc {
    15  	return func(h buffalo.Handler) buffalo.Handler {
    16  		return func(c buffalo.Context) error {
    17  			id, err := c.ParamInt(n)
    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  
    32  func (ur *UsersResource) List(c buffalo.Context) error {
    33  	users := &models.Users{}
    34  	tx := c.Get("tx").(*pop.Connection)
    35  	err := tx.All(users)
    36  	if err != nil {
    37  		return c.Error(404, errors.WithStack(err))
    38  	}
    39  
    40  	c.Set("users", users)
    41  	return c.Render(200, r.HTML("users/index.html"))
    42  }
    43  
    44  func (ur *UsersResource) Show(c buffalo.Context) error {
    45  	return c.Render(200, r.HTML("users/show.html"))
    46  }
    47  
    48  func (ur *UsersResource) New(c buffalo.Context) error {
    49  	c.Set("user", models.User{})
    50  	return c.Render(200, r.HTML("users/new.html"))
    51  }
    52  
    53  func (ur *UsersResource) Create(c buffalo.Context) error {
    54  	u := &models.User{}
    55  	err := c.Bind(u)
    56  	if err != nil {
    57  		return errors.WithStack(err)
    58  	}
    59  
    60  	tx := c.Get("tx").(*pop.Connection)
    61  	verrs, err := u.ValidateNew(tx)
    62  	if err != nil {
    63  		return errors.WithStack(err)
    64  	}
    65  	if verrs.HasAny() {
    66  		c.Set("verrs", verrs.Errors)
    67  		c.Set("user", u)
    68  		return c.Render(422, r.HTML("users/new.html"))
    69  	}
    70  	err = tx.Create(u)
    71  	if err != nil {
    72  		return errors.WithStack(err)
    73  	}
    74  
    75  	return c.Redirect(301, "/users/%d", u.ID)
    76  }
    77  
    78  func (ur *UsersResource) Edit(c buffalo.Context) error {
    79  	return c.Render(200, r.HTML("users/edit.html"))
    80  }
    81  
    82  func (ur *UsersResource) Update(c buffalo.Context) error {
    83  	tx := c.Get("tx").(*pop.Connection)
    84  	u := c.Get("user").(*models.User)
    85  
    86  	err := c.Bind(u)
    87  	if err != nil {
    88  		return errors.WithStack(err)
    89  	}
    90  
    91  	verrs, err := u.ValidateUpdate(tx)
    92  	if err != nil {
    93  		return errors.WithStack(err)
    94  	}
    95  	if verrs.HasAny() {
    96  		c.Set("verrs", verrs.Errors)
    97  		c.Set("user", u)
    98  		return c.Render(422, r.HTML("users/edit.html"))
    99  	}
   100  	err = tx.Update(u)
   101  	if err != nil {
   102  		return errors.WithStack(err)
   103  	}
   104  
   105  	err = tx.Reload(u)
   106  	if err != nil {
   107  		return errors.WithStack(err)
   108  	}
   109  	return c.Redirect(301, "/users/%d", u.ID)
   110  }
   111  
   112  func (ur *UsersResource) Destroy(c buffalo.Context) error {
   113  	tx := c.Get("tx").(*pop.Connection)
   114  	u := c.Get("user").(*models.User)
   115  
   116  	err := tx.Destroy(u)
   117  	if err != nil {
   118  		return errors.WithStack(err)
   119  	}
   120  
   121  	return c.Redirect(301, "/users")
   122  }