public ActionResult ChallengePlayer([FromRoute] int opponentId, [FromBody] PlayerChallengeReqModel challengeData) { challengeData.OpponentId = opponentId; var result = _playerService.ChallengePlayer(challengeData); if (result.Data == null) { //It would be better 204 No Content, 404 is for missing endpoint return(NotFound(result.Error)); } return(Created(new Uri($"/game/{result.Data.GameId.ToString()}", UriKind.Relative), result.Data)); }
public PlayerChallengeRespModel ChallengePlayer(PlayerChallengeReqModel reqModel) { var result = new PlayerChallengeRespModel(); var game = new Game(); var boardList = new List <Board>(); List <PointCoordinate> pointCoordinateList; var player = _context.Players.FirstOrDefault(x => x.Id == reqModel.PlayerId); var opponent = _context.Players.FirstOrDefault(x => x.Id == reqModel.OpponentId); //Check if players exists if (player != null && opponent != null) { using (var transaction = _context.Database.BeginTransaction()) { try { //Create Game game.CreatedUTC = DateTime.UtcNow; game.ModifiedUTC = DateTime.UtcNow; game.PlayerId = reqModel.PlayerId; game.OpponentId = reqModel.OpponentId; game.GameStatusId = (int)Enums.GameStatus.InProgress; _context.Add(game); _context.SaveChanges(); //Create Boards boardList.Add(new Board() { CreatedUTC = DateTime.UtcNow, ModifiedUTC = DateTime.UtcNow, PlayerId = reqModel.PlayerId, GameId = game.Id }); boardList.Add(new Board() { CreatedUTC = DateTime.UtcNow, ModifiedUTC = DateTime.UtcNow, PlayerId = reqModel.OpponentId, GameId = game.Id }); foreach (var board in boardList) { _context.Add(board); } _context.SaveChanges(); //Create PointCoordinates foreach (var board in boardList) { pointCoordinateList = SetRandomShipPoints(board.Id); foreach (var point in pointCoordinateList) { _context.Add(point); } } _context.SaveChanges(); transaction.Commit(); } catch (Exception ex) { transaction.Rollback(); } result.Data = new ChallengePlayerData() { PlayerId = reqModel.PlayerId, OpponentId = reqModel.OpponentId, GameId = game.Id, StartingPlayer = RandomStartPlayer(reqModel.PlayerId, reqModel.OpponentId) }; } } else { result.Error = new SimpleError() { ErrorArg = player == null?reqModel.PlayerId.ToString() : reqModel.OpponentId.ToString(), ErrorCode = "error.unknown-user-id" }; } return(result); }