public IResponse <GameInstance> Play(PlayGameInstanceDto dto) { var gameInstance = Get(dto.Id); var gameStrategy = GameStrategyProvider.Provide(gameInstance.GameId); var newGameStateAsJsonStringResponse = gameStrategy != null?gameStrategy.LoadAndPlayAndReturnGameStateAsString(gameInstance, RequestContext.UserId, dto.UserInput) : new Response <string> { Data = "" }; var response = ResponseMapper.MapMetadata <GameInstance>(newGameStateAsJsonStringResponse); if (!response.IsValid || response.Messages.Any(x => x.Contains("wins!"))) { return(response); } var newGameState = CreateGameStateObject(newGameStateAsJsonStringResponse.Data); response.Data = Save(gameInstance, newGameState); if (gameStrategy != null) { SaveGameStateHistory(response.Data.Id, gameInstance.State, $"User Input: {dto.UserInput}"); } return(response); }
public ActionResult <IResponse <object> > New(CreateGameInstanceDto dto) { var validationResponse = GameInstanceValidator.Validate(dto); if (!validationResponse.IsValid) { return(BadRequest(validationResponse)); } var gameInstanceResponse = GameInstanceLogic.New(dto); var response = ResponseMapper.MapMetadata <GameInstanceDto>(gameInstanceResponse); response.Data = GameInstanceMapper.Map(gameInstanceResponse.Data); return(Ok(response)); }
public void MapMetadata_WithNonNullData_ShouldMapErrorsAndMessages() { //arrange Arrange(); //act var result = ResponseMapper.MapMetadata <string>(_sourceResponse); //assert Assert.AreEqual(3, result.Errors.Count); Assert.AreEqual("this is an error", result.Errors.ElementAt(0)); Assert.AreEqual("this is another error", result.Errors.ElementAt(1)); Assert.AreEqual("this is a third error", result.Errors.ElementAt(2)); Assert.AreEqual(2, result.Messages.Count); Assert.AreEqual("this is a message", result.Messages.ElementAt(0)); Assert.AreEqual("this is another message", result.Messages.ElementAt(1)); }
public async Task <ActionResult <IResponse <object> > > PlayAsync(PlayGameInstanceDto dto) { var validationResponse = GameInstanceValidator.Validate(dto); if (!validationResponse.IsValid) { return(BadRequest(validationResponse)); } var gameInstanceResponse = GameInstanceLogic.Play(dto); var response = ResponseMapper.MapMetadata <GameInstanceDto>(gameInstanceResponse); response.Data = GameInstanceMapper.Map(GameInstanceLogic.Get(dto.Id)); if (response.IsValid) { await GameHubContext.Clients.Group(dto.Id.ToString()).SendAsync("Refresh"); } return(Ok(response)); }