예제 #1
0
        public IActionResult UpdatePerson([FromBody] PersonUpdateVm model)
        {
            var apiResult = Try(() => { return(_personService.UpdatePerson(model)); });

            return(Ok(apiResult));
        }
예제 #2
0
        public ServiceResult <bool> UpdatePerson(PersonUpdateVm model)
        {
            model.Validate();
            var person = _repository.Person.GetById(model.Id);

            if (person == null)
            {
                throw new DomainException("Person Not Found", ExceptionLevel.Error);
            }

            if (model.CityId.HasValue)
            {
                var city = _repository.City.GetById(model.CityId.Value);
                if (city == null)
                {
                    throw new DomainException("City not found", ExceptionLevel.Error);
                }
            }



            person.Update(model.FirstName,
                          model.LastName,
                          model.Gender,
                          model.PrivateNumber,
                          model.BirthDate,
                          model.CityId);

            _repository.Person.Update(person);

            var oldNumber = _repository.PhoneNumber.GetByPersonId(person.Id);

            var deletedNumbers = oldNumber.Where(x => model.PhoneNumbers.All(ph => x.Id != ph.Id)).ToList();
            var newNumbers     = model.PhoneNumbers.Where(x => !x.Id.HasValue || oldNumber.All(on => on.Id != x.Id))
                                 .ToList();
            var updatedNumbers = model.PhoneNumbers.Where(x => oldNumber.Any(old => old.Id == x.Id)).ToList();

            foreach (var modelPhoneNumber in newNumbers)
            {
                var newPhoneNumber =
                    PhoneNumber.Create(person.Id, modelPhoneNumber.NumberType, modelPhoneNumber.Number);
                _repository.PhoneNumber.Create(newPhoneNumber);
            }

            foreach (var deletedNumber in deletedNumbers)
            {
                var old = _repository.PhoneNumber.GetById(deletedNumber.Id, true);
                old?.Delete();
            }

            foreach (var updatedNumber in updatedNumbers)
            {
                if (updatedNumber.Id != null)
                {
                    var old = _repository.PhoneNumber.GetById(updatedNumber.Id.Value, true);
                    old?.Update(updatedNumber.NumberType, updatedNumber.Number);
                }
            }


            _repository.Person.Save();
            return(new ServiceResult <bool>
            {
                Status = ServiceResultStatus.Success
            });
        }