package controller import ( "fmt" ) type User struct { Username string `gorm:"primaryKey" json:"username" validate:"required"` ShowColdDrinks bool `json:"show_cold_drinks" validate:"required"` ShowHotDrinks bool `json:"show_hot_drinks" validate:"required"` } func (c *Controller) doesUserExist(username string) (User, error) { var user User result := c.orm.Limit(1).Find(&user, "username = ?", username) if result.RowsAffected == 0 { return user, fmt.Errorf(CannotFind.String()) } return user, nil } func (c *Controller) getUserOrCreate(username string) (User, error) { var user User err := c.orm.Where(User{Username: username}).Attrs(User{ShowHotDrinks: true, ShowColdDrinks: true}).FirstOrCreate(&user).Error if err != nil { return user, fmt.Errorf(CannotCreate.String()) } return user, nil } func (c *Controller) updateUser(old *User, new *User) error { err := c.orm.First(old).Updates(map[string]interface{}{ "Username": new.Username, "ShowColdDrinks": new.ShowColdDrinks, "ShowHotDrinks": new.ShowHotDrinks}).Error if err != nil { return fmt.Errorf(CannotUpdate.String()) } return nil }