private void assuntoPaiIgualAoEditado(Susep.SISRH.Domain.AggregatesModel.AssuntoAggregate.Assunto assunto)
 {
     if (assunto != null && assunto.AssuntoPaiId != null && assunto.AssuntoPaiId == assunto.AssuntoId)
     {
         throw new SISRHDomainException("O assunto pai escolhido não pode ser o assunto em edição.");
     }
 }
        private async Task validarAssunto(Susep.SISRH.Domain.AggregatesModel.AssuntoAggregate.Assunto assunto, bool alterouPai)
        {
            await assuntoComValorDuplicado(assunto);

            if (alterouPai)
            {
                assuntoPaiIgualAoEditado(assunto);
                await novoPaiEhAncestralDoAssuntoEmEdicao(assunto);
            }
        }
        private async Task assuntoComValorDuplicado(Susep.SISRH.Domain.AggregatesModel.AssuntoAggregate.Assunto assunto)
        {
            if (assunto != null)
            {
                var valorDuplicado = await AssuntoQuery.ValorDuplicadoAsync(assunto.Valor, null);

                if (valorDuplicado.Result)
                {
                    throw new SISRHDomainException("Assunto com valor duplicado.");
                }
            }
        }
        private async Task novoPaiEhAncestralDoAssuntoEmEdicao(Susep.SISRH.Domain.AggregatesModel.AssuntoAggregate.Assunto assuntoEmEdicao)
        {
            if (assuntoEmEdicao != null && assuntoEmEdicao.AssuntoPaiId != null)
            {
                var ids = await AssuntoQuery.ObterIdsDeTodosOsPaisAsync(assuntoEmEdicao.AssuntoPaiId.Value);

                if (ids.Result.Where(id => id == assuntoEmEdicao.AssuntoId).Count() > 0)
                {
                    throw new SISRHDomainException("O assunto pai escolhido não pode ser ancestral do assunto em edição.");
                }
            }
        }
 private async Task validarAssunto(Susep.SISRH.Domain.AggregatesModel.AssuntoAggregate.Assunto assunto)
 {
     await assuntoComValorDuplicado(assunto);
 }