private static IEnumerable <string> ValidateRequest(PathfindingRequestDto pathfindingRequestDto) { var validator = new PathfindingRequestDtoValidator(); var validationResult = validator.Validate(pathfindingRequestDto); return(validationResult.Errors.Select(error => error.ErrorMessage)); }
public Grid MapPathfindingRequestDto(PathfindingRequestDto pathfindingRequestDto) { GridNode start = null; GridNode finish = null; GridNode[][] grid = pathfindingRequestDto.Grid.Select((row, rowIndex) => row.Select((nodeDto, colIndex) => { var node = new GridNode { Type = (GridNodeType)nodeDto.Type, Visited = false, Weight = nodeDto.Weight, TotalWeight = 0, Heuristic = 0, Position = new Position(rowIndex, colIndex), PreviousGridNode = null }; if (node.Type == GridNodeType.Start) { start = node; } if (node.Type == GridNodeType.Finish) { finish = node; } return(node); }).ToArray() ).ToArray(); return(pathfindingRequestDto.SearchDiagonal ? new HorizontalDiagonalGrid(grid) { Start = start, Finish = finish } : new HorizontalGrid(grid) { Start = start, Finish = finish }); }
private IActionResult GenerateResponse(PathfindingAlgorithm algorithm, PathfindingRequestDto pathfindingRequestDto) { var errors = ValidateRequest(pathfindingRequestDto); if (errors.Any()) { return(BadRequest(new ValidationErrorResponseDto { ErrorMessages = errors })); } var grid = _requestMapper.MapPathfindingRequestDto(pathfindingRequestDto); var pathfindingResult = algorithm switch { PathfindingAlgorithm.BreadthFirstSearch => _pathfindingService.BreadthFirstSearch(grid), PathfindingAlgorithm.Dijkstra => _pathfindingService.Dijkstra(grid), PathfindingAlgorithm.AStar => _pathfindingService.AStar(grid), _ => throw new InvalidEnumArgumentException() }; return(Ok(_responseMapper.MapPathfindingResult(pathfindingResult))); }
public IActionResult AStar(PathfindingRequestDto pathfindingRequestDto) { return(GenerateResponse(PathfindingAlgorithm.AStar, pathfindingRequestDto)); }
public IActionResult Dijkstra(PathfindingRequestDto pathfindingRequestDto) { return(GenerateResponse(PathfindingAlgorithm.Dijkstra, pathfindingRequestDto)); }
public IActionResult BreadthFirstSearch(PathfindingRequestDto pathfindingRequestDto) { return(GenerateResponse(PathfindingAlgorithm.BreadthFirstSearch, pathfindingRequestDto)); }