public async Task <IEnumerable <DadosLeituraComunicadosResultado> > Handle(ObterDadosLeituraComunicadosAgrupadosPorDreQuery request, CancellationToken cancellationToken)
        {
            var dadosLeituraComunicadosAgrupadosPorDre = await dadosLeituraRepositorio.ObterDadosLeituraComunicadosPorDre(request.NotificaoId);

            if (dadosLeituraComunicadosAgrupadosPorDre == null || !dadosLeituraComunicadosAgrupadosPorDre.Any())
            {
                throw new Exception("Não foram encontrados dados de leitura de comunicados");
            }

            var retornoDadosLeituraComunicadosResultado = new List <DadosLeituraComunicadosResultado>();

            foreach (var dadosLeituraDre in dadosLeituraComunicadosAgrupadosPorDre)
            {
                var dadosLeituraComunicadosResultado = new DadosLeituraComunicadosResultado();
                if (request.ModoVisualizacao == ModoVisualizacao.Responsavel)
                {
                    await ObterTotaisDeLeituraPorResponsavel(request, dadosLeituraDre, dadosLeituraComunicadosResultado);
                }

                if (request.ModoVisualizacao == ModoVisualizacao.Aluno)
                {
                    await ObterTotaisDeLeituraPorAluno(request, dadosLeituraDre, dadosLeituraComunicadosResultado);
                }

                retornoDadosLeituraComunicadosResultado.Add(dadosLeituraComunicadosResultado);
            }

            return(retornoDadosLeituraComunicadosResultado);
        }
        private async Task ObterTotaisDeLeituraPorResponsavel(ObterDadosLeituraComunicadosAgrupadosPorDreQuery request, DadosConsolidacaoNotificacaoResultado dadosLeituraComunicados, DadosLeituraComunicadosResultado dadosLeituraComunicadosResultado)
        {
            var totalNotificacoesLeituraPorResponsavel = await usuarioNotificacaoLeituraRepositorio.ObterTotalNotificacoesLeituraPorResponsavel(request.NotificaoId, long.Parse(dadosLeituraComunicados.DreCodigo));

            var nomeAbreviadoDre = await ObterNomeAvreviadoDrePorCodigo(dadosLeituraComunicados);

            dadosLeituraComunicadosResultado.NomeAbreviadoDre          = nomeAbreviadoDre.NomeAbreviado;
            dadosLeituraComunicadosResultado.ReceberamENaoVisualizaram = (dadosLeituraComunicados.QuantidadeResponsaveisComApp - totalNotificacoesLeituraPorResponsavel);
            dadosLeituraComunicadosResultado.NaoReceberamComunicado    = dadosLeituraComunicados.QuantidadeResponsaveisSemApp;
            dadosLeituraComunicadosResultado.VisualizaramComunicado    = totalNotificacoesLeituraPorResponsavel;
        }