Example #1
0
        public async Task ObterFilmesAsync_Sucesso()
        {
            // Objeto que sera utilizado para retorno do Mock
            var expected = new List <Filme>()
            {
                new Filme()
                {
                    Id        = 10447,
                    Descricao = "descricao_teste",
                    Nome      = "nome_teste"
                }
            };

            tmdbAdapterMock
            .Setup(m => m.GetFilmesAsync(It.IsAny <Pesquisa>(), "pt-BR"))
            .ReturnsAsync(expected);

            var filmes = await filmesService.ObterFilmesAsync(new Pesquisa()
            {
                TermoPesquisa = "teste"
            });

            var exepectedSingle = expected.Single();

            Assert.Contains(filmes, f =>
                            f.Id == exepectedSingle.Id &&
                            f.Descricao == exepectedSingle.Descricao &&
                            f.Nome == exepectedSingle.Nome);
        }
Example #2
0
        public async Task <IActionResult> GetFilmesAsync([FromQuery] FilmesGet filmesGet)
        {
            Pesquisa            pesquisa = Mapper.Map <FilmesGet, Pesquisa>(filmesGet);
            IEnumerable <Filme> filmes   = await filmesService.ObterFilmesAsync(pesquisa);

            IEnumerable <FilmesGetResult> filmesGetResults =
                Mapper.Map <IEnumerable <Filme>, IEnumerable <FilmesGetResult> >(filmes);

            return(Ok(filmesGetResults));
        }
        public async Task HandleAsync(Pesquisa message,
                                      IMessageContext messageContext)
        {
            logger.LogInformation($"Mensagem {messageContext.Id} " +
                                  $"recebida via queue {messageContext.Queue}.");

            try
            {
                await filmesService.ObterFilmesAsync(message);
            }
            catch (CoreException ex)
            {
                // Quando uma exception é propagada para fora deste método, o
                // mecanismo de fila entende que a mensagem NÃO foi processada
                // e daí coloca esta mensagem para retentativa (ou conforme o
                // caso move a mensagem para uma fila morta).
                //
                // No entanto, as exceptions de negócio (CoreException), em
                // geral, não serão resolvidas apenas com retentativas pois
                // geralmente precisam ser corrigidas em outros sistemas ou
                // processos, portanto, o ideal é capturar essas exceptions
                // e não deixar que subam para gerar novas tentativas.
                //
                // Capturando estas exceptions de negócio aqui, o mecanismo
                // de fila irá entender que a mensagem foi processada e irá
                // retirar esta mensagem da fila.
                //
                // Contudo, para não "perder" esta mensagem, visto que contém
                // erros de negócio, a aplicação deverá tratá-la em algum outro
                // fluxo conforme a necessidade, por exemplo, armazenando-a em
                // banco de dados para então ser analisada e corrigida no
                // contexto do negócio.

                logger.LogWarning(ex, "Falha ao pesquisar filmes para os " +
                                  "critérios informados: {@Pesquisa}.", message);

                // Chamar aqui o servico da aplicacao que irá tratar mensagens
                // com erro de negócio.
            }
        }