Example #1
0
        public async Task <Response> Handle(QueryTournamentRequest request,
                                            CancellationToken cancellationToken)
        {
            logger.LogTrace("Buscando os Filmes na API da Lambda3");
            var lambda3Movies = await lambda3Api.GetMoviesAsync()
                                .ConfigureAwait(false);

            logger.LogTrace("Verifica se todos os filmes foram encontrados");
            lambda3Movies = lambda3Movies.Where(m => request.Movies.Any(r => r == m.Id));
            if (lambda3Movies.Count() != request.Movies.Count())
            {
                logger.LogInformation("Não foram encontrados todos os filmes");

                request.AddNotification("Movies", "Não foram encontrados todos os filmes correspondentes em nossa base de dados");
                return(new Response(request.Notifications, true));
            }

            logger.LogTrace("Ordena os filmes para montagem dos desafios");
            var movies = mapper.Map <IEnumerable <Movie> >(lambda3Movies)
                         .OrderBy(m => m.Title)
                         .Select(m => m);

            await imdbApi.UpdateMoviesAsync(movies)
            .ConfigureAwait(false);

            var result = new CompleteTournament
            {
                Movies = movies
            };

            logger.LogTrace("Calculando as partidas");
            while (movies.Count() > 1)
            {
                var match = CreateMatchups(movies);
                result.AddMatches(match);
                movies = Round(match);
            }

            return(new Response(result));
        }
Example #2
0
 public void TournamentComplete()
 {
     CompleteTournament?.Invoke(this, DateTime.Now);
 }