public async Task <ContactCommandResult> ManageContact(ContactCommand cmd)
 {
     return(cmd.GetType().Name switch
     {
         nameof(SaveContact) => await HandleSaveContact((SaveContact)cmd),
         nameof(DeleteContact) => await HandleDeleteContact((DeleteContact)cmd),
         _ => throw new NotSupportedException($"{cmd.GetType().Name} is not supported")
     });
        private void AddContact(ContactCommand contactCommand)
        {
            Contact contactWithId = _contactService.Add(Mapper.Map <Contact>(contactCommand.Contact));
            ContactMobileViewModel contactViewModel = Mapper.Map <ContactMobileViewModel>(contactWithId);

            _contactMobileAppService.ObservableContacts.Add(contactViewModel);
            _contactEvents.Enqueue(new AddContactEvent(contactWithId));
        }
 public void ProcessQueue(ContactCommand contactCommand)
 {
     _contactCommands.Enqueue(contactCommand);
     while (_contactCommands.Count > 0)
     {
         ContactCommand command = _contactCommands.Dequeue();
         if (command is AddContactCommand)
         {
             AddContact(command);
         }
     }
 }
 public async Task <ContactCommandResult> ManageContact(ContactCommand cmd) =>
 cmd switch
 {