public async Task <AuditoriaDto> Handle(AlterarObservacaoDiarioBordoCommand request, CancellationToken cancellationToken)
        {
            var diarioBordoObservacao = await repositorioDiarioBordoObservacao.ObterPorIdAsync(request.ObservacaoId);

            var usuario = await mediator.Send(new ObterUsuarioLogadoQuery());

            if (diarioBordoObservacao == null)
            {
                throw new NegocioException("Observação do diário de bordo não encontrada.");
            }

            diarioBordoObservacao.ValidarUsuarioAlteracao(request.UsuarioId);

            diarioBordoObservacao.Observacao = request.Observacao;

            await repositorioDiarioBordoObservacao.SalvarAsync(diarioBordoObservacao);

            if (request.Observacao.Trim().Length < 200 && (request.UsuariosIdNotificacao == null || !request.UsuariosIdNotificacao.Any()))
            {
                // Excluir Notificação Especifica
                await mediator.Send(new PublicarFilaSgpCommand(RotasRabbit.RotaExcluirNotificacaoDiarioBordo,
                                                               new ExcluirNotificacaoDiarioBordoDto(request.ObservacaoId), Guid.NewGuid(), null));

                await mediator.Send(new PublicarFilaSgpCommand(RotasRabbit.RotaNotificacaoNovaObservacaoDiarioBordo,
                                                               new NotificarDiarioBordoObservacaoDto(diarioBordoObservacao.DiarioBordoId, request.Observacao, usuario, request.ObservacaoId), Guid.NewGuid(), null));
            }
            else if (request.UsuariosIdNotificacao != null && request.UsuariosIdNotificacao.Any())
            {
                var notificacoes = await repositorioDiarioBordoObservacaoNotificacao.ObterPorDiarioBordoObservacaoId(request.ObservacaoId);

                var usuariosNotificados = notificacoes.Select(n => n.IdUsuario);

                var usuariosExcluidos = usuariosNotificados.Where(u => !request.UsuariosIdNotificacao.Contains(u) && u != usuario.Id);

                var usuariosNotificacao = request.UsuariosIdNotificacao?.Select(async u => await mediator.Send(new ObterUsuarioPorIdQuery(u)))?.Select(t => t.Result);

                await mediator.Send(new PublicarFilaSgpCommand(RotasRabbit.RotaNotificacaoNovaObservacaoDiarioBordo,
                                                               new NotificarDiarioBordoObservacaoDto(diarioBordoObservacao.DiarioBordoId, request.Observacao, usuario, request.ObservacaoId, usuariosNotificacao), Guid.NewGuid(), null));

                foreach (var usuarioExcluido in usuariosExcluidos)
                {
                    // Excluir Notificação Especifica
                    await mediator.Send(new PublicarFilaSgpCommand(RotasRabbit.RotaNotificacaoAlterarObservacaoDiarioBordo,
                                                                   new AlterarNotificacaoDiarioBordoDto(request.ObservacaoId, usuarioExcluido), Guid.NewGuid(), null));
                }
            }

            return((AuditoriaDto)diarioBordoObservacao);
        }
        public async Task <bool> Handle(ExcluirObservacaoDiarioBordoCommand request, CancellationToken cancellationToken)
        {
            var diarioBordoObservacao = await repositorioDiarioBordoObservacao.ObterPorIdAsync(request.ObservacaoId);

            if (diarioBordoObservacao == null)
            {
                throw new NegocioException("Observação do diário de bordo não encontrada.");
            }

            // na exclusão de aula o usuario da exclusão pode não ser o mesmo que inseriu a observação
            if (request.UsuarioId.HasValue)
            {
                diarioBordoObservacao.ValidarUsuarioAlteracao(request.UsuarioId.Value);
            }

            diarioBordoObservacao.Remover();

            await repositorioDiarioBordoObservacao.SalvarAsync(diarioBordoObservacao);

            await mediator.Send(new PublicarFilaSgpCommand(RotasRabbit.RotaExcluirNotificacaoDiarioBordo,
                                                           new ExcluirNotificacaoDiarioBordoDto(request.ObservacaoId), Guid.NewGuid(), null));

            return(true);
        }