public async Task <RoverAggregate> MoveRover([FromBody] MoveRoverRequest request) { RoverAggregate rover; var roverId = new Identity(request.RoverId); var plateauAggregateId = new Identity(request.PlateauAggregateId); using (var resolver = EventFlowOptions.New .RegisterModule <RoverModule>() .UseNullLog() .CreateResolver()) { Helpers.RootResolver = resolver; var commandBus = resolver.Resolve <ICommandBus>(); var createPlateauSurfaceCommand = new CreatePlateauSurfaceCommand(plateauAggregateId, request.PlateauSurfaceSize); var deployRoverCommand = new DeployRoverCommand(roverId, plateauAggregateId, request.RoverPosition); var commands = new List <ICommand> { createPlateauSurfaceCommand, deployRoverCommand }; commands.AddRange(request.RoverCommand.ToRoverCommands(roverId)); await commandBus.PublishMultipleAsync(commands.ToArray()); var aggregateStore = resolver.Resolve <IAggregateStore>(); return(rover = await aggregateStore.LoadAsync <RoverAggregate, Identity>(roverId, CancellationToken.None)); } }
public void GeneratePlataueAndExecuteRoverCommands( string plateauSurfaceSize, string roverPosition, string roverCommand, int expectedX, int exceptedY, Orientation expectedOrientation ) { RoverAggregate rover; var roverId = Identity.New; using (var resolver = EventFlowOptions.New .RegisterModule <RoverModule>() .UseNullLog() .CreateResolver()) { Helpers.RootResolver = resolver; var commandBus = resolver.Resolve <ICommandBus>(); var plateauAggregateId = Identity.New; var createPlateauSurfaceCommand = new CreatePlateauSurfaceCommand(plateauAggregateId, plateauSurfaceSize); var deployRoverCommand = new DeployRoverCommand(roverId, plateauAggregateId, roverPosition); var commands = new List <ICommand> { createPlateauSurfaceCommand, deployRoverCommand }; commands.AddRange(roverCommand.ToRoverCommands(roverId)); commandBus .PublishMultipleAsync(commands.ToArray()) .GetAwaiter() .GetResult(); var aggregateStore = resolver.Resolve <IAggregateStore>(); rover = aggregateStore.LoadAsync <RoverAggregate, Identity>(roverId, CancellationToken.None).Result; } Assert.NotNull(rover); Assert.NotNull(rover.RoverPosition); Assert.Equal(expectedX, rover.RoverPosition.X); Assert.Equal(exceptedY, rover.RoverPosition.Y); Assert.Equal(expectedOrientation, rover.RoverPosition.Orientation); }
public async Task <IExecutionResult> DeployRover([FromBody] DeployRoverRequest request) { var roverId = new Identity(request.RoverId); using (var resolver = EventFlowOptions.New .RegisterModule <RoverModule>() .UseNullLog() .CreateResolver()) { Helpers.RootResolver = resolver; var commandBus = resolver.Resolve <ICommandBus>(); var plateauAggregateId = new Identity(request.PlateauAggregateId); var deployRoverCommand = new DeployRoverCommand(roverId, plateauAggregateId, request.RoverPosition); return(await commandBus.PublishAsync(deployRoverCommand, CancellationToken.None).ConfigureAwait(false)); } }
static void Main(string[] args) { var roverIdList = new List <Identity>(); using (var resolver = EventFlowOptions.New //.ConfigureEventStore() .RegisterModule <RoverModule>() .UseNullLog() .CreateResolver()) { Helpers.RootResolver = resolver; var commandBus = resolver.Resolve <ICommandBus>(); Console.WriteLine("Plateau surface size :"); var sizeInput = Console.ReadLine(); var plateauAggregateId = Identity.New; var createPlateauSurfaceCommand = new CreatePlateauSurfaceCommand(plateauAggregateId, sizeInput); var commands = new List <ICommand> { createPlateauSurfaceCommand, }; while (true) { Console.WriteLine("Rover position :"); string roverPositionInput = Console.ReadLine(); Console.WriteLine("Rover command :"); var roverCommandInput = Console.ReadLine(); var roverId = Identity.New; roverIdList.Add(roverId); var deployRoverCommand = new DeployRoverCommand(roverId, plateauAggregateId, roverPositionInput); commands.Add(deployRoverCommand); commands.AddRange(roverCommandInput.ToRoverCommands(roverId)); Console.WriteLine("Do you want to add another rover ? (Y/N)"); var addRoverInput = Console.ReadLine(); if (!addRoverInput.Equals("Y", StringComparison.InvariantCultureIgnoreCase)) { break; } } commandBus .PublishMultipleAsync(commands.ToArray()) .GetAwaiter() .GetResult(); Console.WriteLine("Expected Output :"); IAggregateStore aggregateStore = resolver.Resolve <IAggregateStore>(); foreach (Identity roverId in roverIdList) { var rover = aggregateStore.LoadAsync <RoverAggregate, Identity>(roverId, CancellationToken.None).Result; Console.WriteLine($"{rover.RoverPosition.X} " + $"{rover.RoverPosition.Y} " + $"{rover.RoverPosition.Orientation.ToString()}"); } Console.Write("Press <enter> to exit..."); Console.ReadLine(); } }