public AddressListItemJsonResult ModifyAddress()

in src/Feature/Account/code/Repositories/AccountRepository.cs [134:197]


        public AddressListItemJsonResult ModifyAddress(PartyInputModelItem model)
        {
            var addresses = new List<CommerceParty>();
            var userResponse = this.AccountManager.GetUser(Context.User.Name);
            var result = new AddressListItemJsonResult(userResponse.ServiceProviderResult);

            if (userResponse.ServiceProviderResult.Success && userResponse.Result != null)
            {
                var commerceUser = userResponse.Result;
                var customer = new CommerceCustomer { ExternalId = commerceUser.ExternalId };
                var party = new CommerceParty
                {
                    ExternalId = model.ExternalId,
                    Name = model.Name,
                    Address1 = model.Address1,
                    City = model.City,
                    Country = model.Country,
                    State = model.State,
                    ZipPostalCode = model.ZipPostalCode,
                    PartyId = model.PartyId,
                    IsPrimary = model.IsPrimary
                };

                if (string.IsNullOrEmpty(party.ExternalId))
                {
                    // Verify we have not reached the maximum number of addresses supported.
                    var numberOfAddresses = this.AllAddresses(result).Count;

                    if (numberOfAddresses >= StorefrontManager.CurrentStorefront.MaxNumberOfAddresses)
                    {
                        var message = StorefrontManager.GetSystemMessage(StorefrontConstants.SystemMessages.MaxAddressLimitReached);
                        result.Errors.Add(string.Format(CultureInfo.InvariantCulture, message, numberOfAddresses));
                        result.Success = false;
                    }
                    else
                    {
                        party.ExternalId = Guid.NewGuid().ToString("B");

                        var response = this.AccountManager.AddParties(this.CurrentStorefront, customer, new List<Sitecore.Commerce.Entities.Party> { party });
                        result.SetErrors(response.ServiceProviderResult);
                        if (response.ServiceProviderResult.Success)
                        {
                            addresses = this.AllAddresses(result);
                        }

                        result.Initialize(addresses, null);
                    }
                }
                else
                {
                    var response = this.AccountManager.UpdateParties(this.CurrentStorefront, customer, new List<Sitecore.Commerce.Entities.Party> { party });
                    result.SetErrors(response.ServiceProviderResult);

                    if (response.ServiceProviderResult.Success)
                    {
                        addresses = this.AllAddresses(result);
                    }

                    result.Initialize(addresses, null);
                }
            }

            return result;
        }