public async Task <ValidationResult> Handle(UpdateCategoriaCommand message, CancellationToken cancellationToken)
        {
            if (!message.IsValid())
            {
                return(message.ValidationResult);
            }

            var categoria         = new Categoria(message.Id, message.Descricao);
            var existingCategoria = await _categoriaRepository.GetByName(categoria.Descricao);

            if (existingCategoria != null && existingCategoria.Id != categoria.Id)
            {
                if (!existingCategoria.Equals(categoria))
                {
                    AddError("A Categoria já foi atualizada");
                    return(ValidationResult);
                }
            }

            categoria.AddDomainEvent(new CategoriaUpdatedEvent(categoria.Id, categoria.Descricao));

            _categoriaRepository.Update(categoria);

            return(await Commit(_categoriaRepository.UnitOfWork));
        }
        public async Task <ValidationResult> Handle(RegisterNewCategoriaCommand message, CancellationToken cancellationToken)
        {
            if (!message.IsValid())
            {
                return(message.ValidationResult);
            }

            var categoria = new Categoria(Guid.NewGuid(), message.Descricao);

            if (await _categoriaRepository.GetByName(categoria.Descricao) != null)
            {
                AddError("Esta categoria já existe no sistema.");
                return(ValidationResult);
            }

            categoria.AddDomainEvent(new CategoriaRegisteredEvent(categoria.Id, categoria.Descricao));

            _categoriaRepository.Add(categoria);

            return(await Commit(_categoriaRepository.UnitOfWork));
        }