public async Task <ICommandResult> Handle(UpdateUserCommad request, CancellationToken cancellationToken)
        {
            request.Validate();

            if (!request.IsValid)
            {
                return(new CommandResult(false, "Os dados do usuário estão incorretos.", request.Notifications));
            }

            var usuarioEncontrado = await _userRepository.GetUserByUserCodeAsync(request.UserCode);

            if (usuarioEncontrado == null)
            {
                return(new CommandResult(true, "Usuario não encontrado", null));
            }

            usuarioEncontrado.ChangeShoppingDay(request.ShoppingDay);

            var usuarioCadastrado = await _userRepository.UpdateUserAsync(usuarioEncontrado);

            if (usuarioCadastrado == null)
            {
                return(new CommandResult(false, "Problemas ao efetuar a atualização do usuário.", null));
            }

            var userOperationDomainEvent = new UserOperationDomainEvent(EventAction.UPDATE, usuarioCadastrado);

            await _domainEntityEventHandler.Raise(userOperationDomainEvent);

            return(new CommandResult(true, "Usuário atualizado com sucesso!", request));
        }
        public async Task <ICommandResult> Handle(CreateUserCommand request, CancellationToken cancellationToken)
        {
            request.Validate();

            if (!request.IsValid)
            {
                return(new CommandResult(false, "Os dados do usuário estão incorretos.", request.Notifications));
            }

            var usuarioJaCadastrado = await _userRepository.VerifyUserAsync(request.UserCode);

            if (usuarioJaCadastrado)
            {
                return(new CommandResult(true, "Usuario Já cadastrado", "cadastrado"));
            }

            var provedor = request.Email.Split("@");

            var email = new Email(request.Email, provedor[1]);

            var novoUsuario = new User(request.Name, email, request.UserCode, request.ShoppingDay);

            var usuarioCadastrado = await _userRepository.CreateUserAsync(novoUsuario);

            if (usuarioCadastrado == null)
            {
                return(new CommandResult(false, "Problemas ao efetuar o cadastro do usuário.", null));
            }

            var createUserDomainEvent = new UserOperationDomainEvent(EventAction.INSERT, novoUsuario);
            await _domainEntityEventHandler.Raise(createUserDomainEvent);

            return(new CommandResult(true, "Usuário cadastrado com sucesso!", request));
        }