public async Task <IActionResult> UpdateUser(UpdateUserDataViewModel model) { if (ModelState.IsValid) { try { var user = await _userHelper.GetUserByIdAsync(model.User.Id); var zipCodeId = await _zipCodeRepository.GetZipCodeAsync(model.ZipCode4, model.ZipCode3); if (zipCodeId == null) { var zip = await _zipCodeRepository.GetCityIdFromZip4(model.ZipCode4); if (zip == null) { ModelState.AddModelError(string.Empty, "The first 4 numbers of zip code are not valid, please insert again"); return(View(model)); } var newZipCode = _converterHelper.ToNewZipCode(model.ZipCode4, model.ZipCode3, zip.CityId); await _zipCodeRepository.CreateAsync(newZipCode); var pathZipNull = string.Empty; if (model.ImageFile != null) { pathZipNull = await _imageHelper.UploadImageAsync(model.ImageFile, "Users"); } var zipCodeIdNew = await _zipCodeRepository.GetZipCodeAsync(model.ZipCode4, model.ZipCode3); var updateUserZipNull = _converterHelper.ToUserFromUpdate(model, user, zipCodeIdNew.Id, pathZipNull); if (updateUserZipNull == null) { ModelState.AddModelError(string.Empty, "User not found, please try again"); return(View(model)); } var resultZipNull = await _userHelper.UpdateUserAsync(updateUserZipNull); if (resultZipNull.Succeeded) { return(RedirectToAction("Index", "Home")); } } var path = string.Empty; if (model.ImageFile != null) { path = await _imageHelper.UploadImageAsync(model.ImageFile, "Users"); } var updateUser = _converterHelper.ToUserFromUpdate(model, user, zipCodeId.Id, path); if (updateUser == null) { ModelState.AddModelError(string.Empty, "User not found, please try again"); return(View(model)); } var result = await _userHelper.UpdateUserAsync(updateUser); if (result.Succeeded) { return(RedirectToAction("Index", "Home")); } } catch (Exception ex) { if (ex.InnerException.Message.Contains("duplicate")) { if (ModelState.IsValid) { var user = await _userHelper.GetUserByIdAsync(model.User.Id); await _userHelper.DeleteUserAsync(user); return(RedirectToAction("DuplicatedUser")); } } else { ModelState.AddModelError(string.Empty, ex.InnerException.Message); } } } return(View(model)); }