public async Task <IActionResult> Put(int id, [FromBody] UserModel model) { try { if (!ModelState.IsValid) { return(BadRequest(ModelState)); } if (model.Id != id) { return(BadRequest("Changing id is impossible")); } var usr = _repo.GetUser(id); if (usr == null) { return(NotFound()); } if (usr.FirstName.Equals(model.FirstName) && usr.LastName.Equals(model.LastName) && id != usr.Id) { return(BadRequest("User with requested name exists.")); } var newNameOccured = (usr.FirstName != model.FirstName) || (usr.LastName != model.LastName); var events = _repo.GetAllEventsOfHost(usr); usr.FirstName = model.FirstName; usr.LastName = model.LastName; usr.Title = model.Title; usr.Pose = model.Pose; usr.Headline = model.Headline; usr.Phone = model.Phone; usr.Email = model.Email; usr.Linkedin = model.Linkedin; usr.Location = model.Location; usr.Tags = model.Tags; _repo.Update(usr); if (!await _repo.SaveAllAsync()) { return(BadRequest("Could not update user")); } if (!newNameOccured) { return(Ok(Mapper.Map <UserModel>(usr))); } // Updating info of related events if (events.Count() == 0) { return(Ok(Mapper.Map <UserModel>(usr))); } foreach (var ev in events) { ev.HostFirstName = usr.FirstName; ev.HostLastName = usr.LastName; } _repo.UpdateMany(events); if (await _repo.SaveAllAsync()) { return(Ok(Mapper.Map <UserModel>(usr))); } else { return(BadRequest("User updated but related events not")); } } catch (Exception ex) { _logger.LogError($"Exception thrown while updating user: {ex}"); } return(BadRequest("Could not update user")); }