Ejemplo n.º 1
0
        public Task <string> GetBestRoute(BestRouteRequest action)
        {
            StartNode = new Node()
            {
                Name = action.From.ToUpper()
            };
            EndNode = new Node()
            {
                Name = action.To.ToUpper()
            };
            DataSource = action.DataSource;

            DijkstraSearch();
            BuildShortestPath(BestRoute, EndNode);
            BestRoute.AddFirst(StartNode);

            var itinerary = new BestRouteResponse()
            {
                BestRoute = BestRoute
            };

            var message = itinerary.BestRoute.Last() == EndNode
                ? $"Best route found: {itinerary} > $ {itinerary.Total}"
                : "No routes found for this params :(";

            return(Task.FromResult(message));
        }
Ejemplo n.º 2
0
        public async Task <ActionResult> GetBestRoute([FromQuery] BestRouteRequest action)
        {
            var errors = new List <ValidationResult>();

            Validator.TryValidateObject(action, new ValidationContext(action, null, null), errors, true);

            if (errors.Count > 0)
            {
                return(BadRequest(errors.First()));
            }

            var result = await _service.GetBestRoute(action);

            return(Ok(result));
        }
Ejemplo n.º 3
0
        public async Task GetBestRoute_Should_Return_BadRequest_DataSource(string dataSource, string from, string to)
        {
            //Arrange
            var fakeRequest = new BestRouteRequest()
            {
                DataSource = dataSource,
                From       = from,
                To         = to
            };

            //Act
            var result = await _controller.GetBestRoute(fakeRequest);

            var okResult = result as BadRequestObjectResult;

            //Assert
            Assert.Equal(400, okResult.StatusCode);
            Assert.Equal("The field DataSource is required.", okResult.Value.ToString());
        }
Ejemplo n.º 4
0
        public async Task GetBestRoute_Should_Return_Ok(string dataSource, string from, string to)
        {
            //Arrange
            var fakeRequest = new BestRouteRequest()
            {
                DataSource = dataSource,
                From       = from,
                To         = to
            };

            //Act
            var result = await _controller.GetBestRoute(fakeRequest);

            var okResult   = result as OkObjectResult;
            var resultData = okResult.Value;

            //Assert
            Assert.NotNull(resultData);
            Assert.Equal(200, okResult.StatusCode);
            Assert.StartsWith("Best route found: GRU -> ", resultData.ToString());
        }
Ejemplo n.º 5
0
        static async Task Main()
        {
            using IHost host = CreateHostBuilder().Build();
            ISearchService service   = CreateScope(host.Services);
            var            request   = new BestRouteRequest();
            var            errors    = new List <ValidationResult>();
            Stopwatch      stopWatch = new Stopwatch();

            do
            {
                Console.Write($"Enter the CSV filename. Ex: input-file.csv: ");
                string dataSource = Console.ReadLine();

                Console.Write($"Enter the route in format \"FROM-TO\". Ex: GRU-SCL: ");
                string route = Console.ReadLine();

                if (route.Split("-").Length == 2)
                {
                    request = new BestRouteRequest()
                    {
                        From       = route.Split("-")[0],
                        To         = route.Split("-")[1],
                        DataSource = dataSource
                    };
                }

                Validator.TryValidateObject(request, new ValidationContext(request, null, null), errors, true);
            }while (errors.Count > 0);

            stopWatch.Start();
            var result = await service.GetBestRoute(request);

            stopWatch.Stop();

            Console.WriteLine($"{result} \n RunTime: " + stopWatch.Elapsed.ToString());
            await Task.Run(() => host.RunAsync());
        }