public async Task <Response <TodoItem> > HandleAsync(CreateTodoItemRequest request)
        {
            var todoItemEntityResponse = new Response <TodoItemEntity>();

            // Query. Apply all validation and modification rules.  These rules can only query the database.
            await _rulesEngine.ProcessAsync(request, todoItemEntityResponse, _createRulesFactory.Create().ToList());

            if (todoItemEntityResponse.HasErrors())
            {
                return(new Response <TodoItem>(todoItemEntityResponse.Notifications));
            }

            // Query. Apply all validation and modification rules.  These rules can only query the database.
            await _rulesEngine.ProcessAsync(request, todoItemEntityResponse, _saveRulesFactory.Create().ToList());

            if (todoItemEntityResponse.HasErrors())
            {
                return(new Response <TodoItem>(todoItemEntityResponse.Notifications));
            }

            // Command.  Save the data.
            await _createTodoItemRepository.SaveAsync(todoItemEntityResponse);

            LogTodoItemEntityResponse(todoItemEntityResponse);

            return(new Response <TodoItem>(todoItemEntityResponse.Notifications, TodoItemMapper.MapToTodoItem(todoItemEntityResponse.Item)));
        }