public async Task Update(ContactAllData contactAllData) { var currentContactDbModel = await _contactData.GetOne( contactAllData.Id, includes => includes.Add(c => c.Tags).Add(c => c.Emails).Add(c => c.PhoneNumbers) ); if (currentContactDbModel == null) { throw new ModelNotFoundException(); } _unitOfWork.DeleteRange(currentContactDbModel.Tags); _unitOfWork.DeleteRange(currentContactDbModel.Emails); _unitOfWork.DeleteRange(currentContactDbModel.PhoneNumbers); await _unitOfWork.PersistChanges(); EnsureConsistency(contactAllData); var updatedContactDbModel = _mapper.Map <Contact>(contactAllData); await IdentifyTags(updatedContactDbModel); var unPersistedTags = updatedContactDbModel.Tags.Select(e => e.Tag).Where(e => e.Id == 0); _unitOfWork.Update(updatedContactDbModel); _unitOfWork.SaveRange(updatedContactDbModel.Emails); _unitOfWork.SaveRange(updatedContactDbModel.PhoneNumbers); _unitOfWork.SaveRange(unPersistedTags); _unitOfWork.SaveRange(updatedContactDbModel.Tags); await _unitOfWork.PersistChanges(); }
private void EnsureConsistency(ContactAllData contact) { contact.Tags = contact.Tags != null?contact.Tags.Distinct() : new string[] { }; contact.Emails = contact.Emails != null?contact.Emails.Distinct() : new string[] { }; contact.PhoneNumbers = contact.PhoneNumbers != null?contact.PhoneNumbers.Distinct() : new long[] { }; }
public async Task Save(ContactAllData contact) { EnsureConsistency(contact); var contactDbModel = _mapper.Map <Contact>(contact); await IdentifyTags(contactDbModel); var unPersistedTags = contactDbModel.Tags.Select(e => e.Tag).Where(e => e.Id == 0); _unitOfWork.SaveRange(unPersistedTags); //await _unitOfWork.PersistChanges(); _unitOfWork.Save(contactDbModel); await _unitOfWork.PersistChanges(); contact.Id = contactDbModel.Id; }
public Task Put(ContactAllData c) => _safeRunner.Run(() => _contactsService.Update(c), Ok);
public Task Post(ContactAllData c) => _safeRunner.Run(() => _contactsService.Save(c), Ok);