public async Task <JsonResult> GetZipCodeAndCityId(string zip4, string zip3)
        {
            var exists = await _zipCodeRepository.ZipCodeExistsAsync(zip4, zip3);

            if (exists)
            {
                var zipcode = await _zipCodeRepository.GetZipCodeAsync(zip4, zip3);

                var cityName = await _cityRepository.GetByIdAsync(zipcode.CityId);

                string data = zipcode.Id + "," + cityName.CityName;

                var r = this.Json(data);

                return(r);
            }

            return(null);
        }
        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));
        }