Пример #1
0
        public async Task <List <SyncContactResponse> > SyncAllFromNative(List <SyncContactRequest> model)
        {
            string userId = _authHelper.GetUserId();
            User   user   = await _userRepository.GetById(userId);

            List <Contact> contacts     = _mapper.Map <List <SyncContactRequest>, List <Contact> >(model);
            var            phoneNumbers = new List <string>();

            foreach (var contact in contacts)
            {
                foreach (var phoneNumber in contact.ContactData.PhoneNumbers)
                {
                    phoneNumber.PhoneNumber.Number = phoneNumber.PhoneNumber.Number.PhoneNumberFormat();
                    phoneNumbers.Add(phoneNumber.PhoneNumber.Number);
                }
                contact.CreatingDate = DateTime.UtcNow;
            }
            contacts = GroupContactsByNumber(contacts);
            List <PhoneNumber> existPhoneNumbers = await _phoneNumberRepository.GetByListNumber(phoneNumbers);

            if (existPhoneNumbers.Any())
            {
                List <string>  existPhoneNumbersIds = existPhoneNumbers.Select(x => x.Id).ToList();
                List <Contact> existContacts        = await _contactRepository.GetByListPhone(existPhoneNumbersIds, user.PhoneNumber);

                foreach (var contact in existContacts)
                {
                    contact.FriendId = userId;
                }
                await _contactRepository.UpdateRange(existContacts);

                foreach (var contact in contacts)
                {
                    if (existContacts.Any(x => x.Id.Equals(contact.Id)))
                    {
                        contact.FriendId = existContacts.FirstOrDefault(x => x.Id.Equals(contact.Id)).UserId;
                        contact.ContactData.PhoneNumbers = contact.ContactData.PhoneNumbers.Where(x => !phoneNumbers.Contains(x.PhoneNumber.Number)).ToList();
                    }
                }
            }
            await _contactRepository.AddRange(contacts);

            List <SyncContactResponse> responses = _mapper.Map <List <Contact>, List <SyncContactResponse> >(contacts);

            return(responses);
        }