示例#1
0
        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));
        }
示例#2
0
        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);
        }