github.com/rotblauer/buffalo@v0.7.1-0.20170112214545-7aa55ef80dd3/examples/html-crud/models/user.go (about) 1 package models 2 3 import ( 4 "encoding/json" 5 "fmt" 6 "time" 7 8 "github.com/markbates/going/validate" 9 "github.com/markbates/going/validate/validators" 10 "github.com/markbates/pop" 11 ) 12 13 type User struct { 14 ID int `json:"id" db:"id" schema:"-"` 15 CreatedAt time.Time `json:"created_at" db:"created_at"` 16 UpdatedAt time.Time `json:"updated_at" db:"updated_at"` 17 FirstName string `json:"first_name" db:"first_name"` 18 LastName string `json:"last_name" db:"last_name"` 19 Email string `json:"email" db:"email"` 20 } 21 22 // String is not required by pop and may be deleted 23 func (u User) String() string { 24 b, _ := json.Marshal(u) 25 return string(b) 26 } 27 28 func (u User) FullName() string { 29 return fmt.Sprintf("%s %s", u.FirstName, u.LastName) 30 } 31 32 func (u *User) ValidateNew(tx *pop.Connection) (*validate.Errors, error) { 33 verrs, err := u.validateCommon(tx) 34 verrs.Append(validate.Validate( 35 &validators.FuncValidator{ 36 Fn: func() bool { 37 var b bool 38 if u.Email != "" { 39 b, err = tx.Where("email = ?", u.Email).Exists(u) 40 } 41 return !b 42 }, 43 Field: "Email", 44 Message: "%s was already taken.", 45 }, 46 )) 47 return verrs, err 48 } 49 50 func (u *User) ValidateUpdate(tx *pop.Connection) (*validate.Errors, error) { 51 verrs, err := u.validateCommon(tx) 52 verrs.Append(validate.Validate( 53 &validators.FuncValidator{ 54 Fn: func() bool { 55 var b bool 56 if u.Email != "" { 57 b, err = tx.Where("email = ? and id != ?", u.Email, u.ID).Exists(u) 58 } 59 return !b 60 }, 61 Field: "Email", 62 Message: "%s was already taken.", 63 }, 64 )) 65 return verrs, err 66 } 67 68 func (u *User) validateCommon(tx *pop.Connection) (*validate.Errors, error) { 69 verrs := validate.Validate( 70 &validators.StringIsPresent{Name: "First Name", Field: u.FirstName}, 71 &validators.StringIsPresent{Name: "Last Name", Field: u.LastName}, 72 &validators.StringIsPresent{Name: "Email", Field: u.Email}, 73 ) 74 return verrs, nil 75 } 76 77 // Users is not required by pop and may be deleted 78 type Users []User 79 80 // String is not required by pop and may be deleted 81 func (u Users) String() string { 82 b, _ := json.Marshal(u) 83 return string(b) 84 }