// observacao <- notificacao_observacao -> notificacao
        public async Task <bool> Handle(ExcluirNotificacaoDiarioBordoCommand request, CancellationToken cancellationToken)
        {
            var notificacoesObservacao = await repositorioDiarioBordoObservacaoNotificacao.ObterPorDiarioBordoObservacaoId(request.ObservacaoId);

            unitOfWork.IniciarTransacao();
            try
            {
                foreach (var notificacaoObservacao in notificacoesObservacao)
                {
                    var notificacaoObservacaoDominio = MapearParaDominio(notificacaoObservacao);
                    await repositorioDiarioBordoObservacaoNotificacao.Excluir(notificacaoObservacaoDominio);

                    await repositorioNotificacao.RemoverLogico(notificacaoObservacao.IdNotificacao);
                }

                unitOfWork.PersistirTransacao();
            }
            catch (Exception)
            {
                unitOfWork.Rollback();
                throw;
            }

            return(true);
        }
        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);
        }