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

     1  package actions
     2  
     3  import (
     4  	"github.com/gobuffalo/buffalo"
     5  	"github.com/gobuffalo/buffalo/examples/html-crud/models"
     6  	"github.com/markbates/pop"
     7  	"github.com/pkg/errors"
     8  )
     9  
    10  func findUserMW(h buffalo.Handler) buffalo.Handler {
    11  	return func(c buffalo.Context) error {
    12  		id, err := c.ParamInt("user_id")
    13  		if err == nil {
    14  			u := &models.User{}
    15  			tx := c.Get("tx").(*pop.Connection)
    16  			err = tx.Find(u, id)
    17  			if err != nil {
    18  				return c.Error(404, errors.WithStack(err))
    19  			}
    20  			c.Set("user", u)
    21  		}
    22  		return h(c)
    23  	}
    24  }
    25  
    26  func UsersList(c buffalo.Context) error {
    27  	users := &models.Users{}
    28  	tx := c.Get("tx").(*pop.Connection)
    29  	err := tx.All(users)
    30  	if err != nil {
    31  		return c.Error(404, errors.WithStack(err))
    32  	}
    33  
    34  	c.Set("users", users)
    35  	return c.Render(200, r.HTML("users/index.html"))
    36  }
    37  
    38  func UsersShow(c buffalo.Context) error {
    39  	return c.Render(200, r.HTML("users/show.html"))
    40  }
    41  
    42  func UsersNew(c buffalo.Context) error {
    43  	c.Set("user", models.User{})
    44  	return c.Render(200, r.HTML("users/new.html"))
    45  }
    46  
    47  func UsersCreate(c buffalo.Context) error {
    48  	u := &models.User{}
    49  	err := c.Bind(u)
    50  	if err != nil {
    51  		return errors.WithStack(err)
    52  	}
    53  
    54  	tx := c.Get("tx").(*pop.Connection)
    55  	verrs, err := u.ValidateNew(tx)
    56  	if err != nil {
    57  		return errors.WithStack(err)
    58  	}
    59  	if verrs.HasAny() {
    60  		c.Set("verrs", verrs.Errors)
    61  		c.Set("user", u)
    62  		return c.Render(422, r.HTML("users/new.html"))
    63  	}
    64  	err = tx.Create(u)
    65  	if err != nil {
    66  		return errors.WithStack(err)
    67  	}
    68  
    69  	return c.Redirect(301, "/users/%d", u.ID)
    70  }
    71  
    72  func UsersEdit(c buffalo.Context) error {
    73  	return c.Render(200, r.HTML("users/edit.html"))
    74  }
    75  
    76  func UsersUpdate(c buffalo.Context) error {
    77  	tx := c.Get("tx").(*pop.Connection)
    78  	u := c.Get("user").(*models.User)
    79  
    80  	err := c.Bind(u)
    81  	if err != nil {
    82  		return errors.WithStack(err)
    83  	}
    84  
    85  	verrs, err := u.ValidateUpdate(tx)
    86  	if err != nil {
    87  		return errors.WithStack(err)
    88  	}
    89  	if verrs.HasAny() {
    90  		c.Set("verrs", verrs.Errors)
    91  		c.Set("user", u)
    92  		return c.Render(422, r.HTML("users/edit.html"))
    93  	}
    94  	err = tx.Update(u)
    95  	if err != nil {
    96  		return errors.WithStack(err)
    97  	}
    98  
    99  	err = tx.Reload(u)
   100  	if err != nil {
   101  		return errors.WithStack(err)
   102  	}
   103  	return c.Redirect(301, "/users/%d", u.ID)
   104  }
   105  
   106  func UsersDelete(c buffalo.Context) error {
   107  	tx := c.Get("tx").(*pop.Connection)
   108  	u := c.Get("user").(*models.User)
   109  
   110  	err := tx.Destroy(u)
   111  	if err != nil {
   112  		return errors.WithStack(err)
   113  	}
   114  
   115  	return c.Redirect(301, "/users")
   116  }