public IActionResult Post([FromBody] PhoneBookContactDto phoneBookContactDto)
        {
            //Check if contact exists then update, otherwise insert new.
            bool result;

            if (_phoneBookRepository.CheckifContactExists(phoneBookContactDto.Name))
            {
                //Check if the entry already exists and return 409 if true
                if (_phoneBookRepository.CheckifContactEntryExists(phoneBookContactDto))
                {
                    return(StatusCode(StatusCodes.Status409Conflict));
                }
                result = _phoneBookRepository.UpdateContact(phoneBookContactDto);
            }
            else
            {
                result = _phoneBookRepository.InsertContact(phoneBookContactDto);
            }


            if (!result)
            {
                return(StatusCode(StatusCodes.Status500InternalServerError));
            }

            return(Ok());
        }
        public bool UpdateContact(PhoneBookContactDto phoneBookContactDto)
        {
            var contact = _context.PhoneBookContacts.Where(x => x.Name.Equals(phoneBookContactDto.Name, StringComparison.OrdinalIgnoreCase))
                          .FirstOrDefault();

            List <Entry> entries = contact?.Entries.ToList() ?? new List <Entry>();

            entries.Add(new Entry
            {
                PhoneNumber = phoneBookContactDto.Number,
                EntryType   = phoneBookContactDto.EntryType
            });

            if (contact != null)
            {
                _context.Update(new PhoneBookContact
                {
                    Id      = contact.Id,
                    Name    = contact.Name,
                    Entries = entries
                });
            }
            _context.SaveChanges();

            return(true);
        }
        public bool DeleteContact(PhoneBookContactDto phoneBookContactDto)
        {
            var contact = _context.PhoneBookContacts
                          .Where(x => x.Name.Equals(phoneBookContactDto.Name, StringComparison.OrdinalIgnoreCase))
                          .FirstOrDefault();

            _context.PhoneBookContacts.Remove(contact);
            _context.SaveChanges();
            return(true);
        }
        public IActionResult Delete([FromBody] PhoneBookContactDto phoneBookContactDto)
        {
            bool result = _phoneBookRepository.DeleteContact(phoneBookContactDto);

            if (!result)
            {
                return(StatusCode(StatusCodes.Status500InternalServerError));
            }

            return(Ok());
        }
        public bool CheckifContactEntryExists(PhoneBookContactDto phoneBookContactDto)
        {
            var contact = _context.PhoneBookContacts.Include(x => x.Entries)
                          .Where(x => x.Name == phoneBookContactDto.Name)
                          .FirstOrDefault();

            List <Entry> entries = contact?.Entries.ToList() ?? new List <Entry>();

            return(entries.Any(x => x.EntryType.ToLower() == phoneBookContactDto.EntryType.ToLower() &&
                               x.PhoneNumber.ToLower() == phoneBookContactDto.Number.ToLower()));
        }
        public bool InsertContact(PhoneBookContactDto phoneBookContact)
        {
            _context.Add(new PhoneBookContact
            {
                Name    = phoneBookContact.Name,
                Entries = new List <Entry>
                {
                    new Entry
                    {
                        PhoneNumber = phoneBookContact.Number,
                        EntryType   = phoneBookContact.EntryType
                    }
                }
            });

            _context.SaveChanges();

            return(true);
        }