internal MarsRoversResource MapRoversToResource(Dictionary <int, Rover> rovers) { var result = new MarsRoversResource(); foreach (var rover in rovers) { result.RoverPositions.Add(new RoverPositionResource() { Direction = rover.Value.CurrentPosition.Direction.GetEnumDescription(), PositionX = rover.Value.CurrentPosition.X, PositionY = rover.Value.CurrentPosition.Y, StatusMessage = rover.Value.StatusMessage, Success = rover.Value.Success }); } return(result); }
public MarsRoversResource CalculateRoversPosition(MarsRoversModel model) { var result = new MarsRoversResource(); var rovers = new Dictionary <int, Rover>(); var directions = EnumDescriptionHelper.GetEnumDescriptions <Direction>().ToList(); var commands = EnumDescriptionHelper.GetEnumDescriptions <RoverCommand>().ToList(); var index = 0; try { // InitializeRovers foreach (var roverModel in model.Rovers) { index++; rovers.Add(index, InitializeRover(index, roverModel, directions, commands)); } ; // Validate starting positions foreach (var rover in rovers) { PositionValidator.ValidatePosition(rover.Value, rover.Value.CurrentPosition, rovers, model.PlateauX, model.PlateauY, true); } // ProcessRovers var deployedRovers = rovers.Where(x => x.Value.Deployed).ToDictionary(x => x.Key, x => x.Value);; foreach (var rover in deployedRovers) { ProcessRoverCommands(rover.Value, deployedRovers, model.PlateauX, model.PlateauY); } // Map results result = MapRoversToResource(rovers); } catch (Exception ex) { _logger.LogError(ex, ex.Message); throw; } return(result); }