Вот моя функция обновления пользователя:
Я передаю структуру User в функцию и не беспокоюсь о том, какие поля необходимо обновить, я просто обновляю их все.Звонящий работает с пользователем, которого он получил от предыдущего функционала, который возвратил его из БД (я покажу вам обработчик API, если вы хотите это увидеть).
После обновления я вызываю Get
функция для получения недавно обновленной записи из БД и возврата структуры User.Это точно, что звонящий может точно видеть, что он только что сделал.
// Update a User identified by id
func (u *UserModel) Update(user *models.User) (*models.User, error) {
stmt := `UPDATE user SET
first_name = ?,
last_name = ?,
email = ?,
phone = ?,
status_id = ?
WHERE id = ?`
var userStatus models.UserStatus
userStatusID := userStatus.GetID(user.Status)
_, err := u.DB.Exec(stmt, user.FirstName, user.LastName, user.Email, user.Phone, userStatusID, user.ID)
if err != nil {
if mysqlErr, ok := err.(*mysql.MySQLError); ok {
if mysqlErr.Number == 1062 && strings.Contains(mysqlErr.Message, "uk_user_email") {
return nil, models.ErrDuplicateEmail
}
}
return nil, err
}
user, err = u.Get(int(user.ID))
if err != nil {
return nil, err
}
return user, nil
}