public async Task <IHttpActionResult> PostGamePlayer(GamePlayer gamePlayer) { if (!ModelState.IsValid) { return(BadRequest(ModelState)); } db.GamePlayers.Add(gamePlayer); await db.SaveChangesAsync(); // New code: // Load author name db.Entry(gamePlayer).Reference(x => x.Team).Load(); var dto = new GamePlayerDTO() { Id = gamePlayer.Id, FirstName = gamePlayer.FirstName, LastName = gamePlayer.LastName, IsCaptain = gamePlayer.IsCaptain, IsStartingSubstitute = gamePlayer.IsStartingSubstitute, GameId = gamePlayer.GameId, TeamName = gamePlayer.Team.Name }; return(CreatedAtRoute("DefaultApi", new { id = gamePlayer.Id }, gamePlayer)); }
public GameDTO StartGame(Guid playerId) { using (var transaction = _dbContext.Database.BeginTransaction()) { if (!_dbContext.Players.AsQueryable().Where(p => p.Id == playerId).Any()) { transaction.Rollback(); throw new NotFoundException("Player"); } if (!_dbContext.Players.AsQueryable().Where(p => p.Id == _gameBot.Id).Any()) { _dbContext.Players.Add(new Player { Id = _gameBot.Id, Name = _gameBot.Name, CreateTime = DateTime.UtcNow }); _dbContext.SaveChanges(); } var playerGames = _dbContext.Games .AsQueryable() .Include(g => g.GamePlayers) .Where(g => g.GamePlayers.Where(gp => gp.PlayerId == playerId).Any()) .OrderByDescending(g => g.CreateTime) .Take(2) .ToList(); var game = new GameDTO(); var gamePlayer = new GamePlayerDTO(); var gameBot = new GamePlayerDTO(); gamePlayer.PlayerId = playerId; gamePlayer.GameId = game.Id; gameBot.PlayerId = _gameBot.Id; gameBot.GameId = game.Id; if (playerGames.Count() > 0) { var lastGame = playerGames[0]; if (!lastGame.IsCompleted) { _dbContext.Games.Remove(lastGame); if (playerGames.Count() > 1) { lastGame = playerGames[1]; } } var piece = lastGame.GamePlayers.Where(gp => gp.PlayerId == playerId).First().Piece; Enum.TryParse(piece, out Pieces lastPiece); if (lastPiece == Pieces.X) { gamePlayer.Piece = Pieces.O; gameBot.Piece = Pieces.X; var movement = _gameBot.MakeMove(game.Movements); game.Movements.Add(_gameBot.MakeMove(game.Movements)); } else { gamePlayer.Piece = Pieces.X; gameBot.Piece = Pieces.O; } } else { gamePlayer.Piece = Pieces.X; gameBot.Piece = Pieces.O; } game.GamePlayers.Add(gamePlayer); game.GamePlayers.Add(gameBot); _dbContext.Games.Add(_mapper.Map <GameDTO, DAL.Entities.Game>(game)); _dbContext.SaveChanges(); transaction.Commit(); return(game); } }
private async Task SubInStartingPlayer(Game _game, GamePlayerDTO player) { var _sub = new Substitution(Guid.NewGuid(), DateTime.Now, player.TeamB, player.Id, _game.Id, true); await _playsService.AddPlay(_sub); }