Пример #1
0
        public async Task <ActionResult> PutCurrentPlayer([FromBody] PlayerPutRequestModel player)
        {
            string userId = User.GetId();

            // TODO - need to prevent modifying gamertag

            // Update player
            await _store.SavePlayerAsync(
                new Player { UserId = userId, Gamertag = player.Gamertag, Country = player.Country, CustomTag = player.CustomTag });

            // Return result
            return(NoContent());
        }
Пример #2
0
        public async Task <ActionResult> Post([FromBody] PlayerPostRequestModel newPlayer)
        {
            // Save player
            var player = new Player
            {
                UserId    = newPlayer.UserId,
                Gamertag  = newPlayer.Gamertag,
                Country   = newPlayer.Country,
                CustomTag = newPlayer.CustomTag
            };
            await _store.SavePlayerAsync(player);

            // Return result
            return(CreatedAtRoute(nameof(GetPlayer), new { gamertag = player.Gamertag }, null));
        }
Пример #3
0
        public async Task <IActionResult> SetGamertagForPlayerId(
            [FromRoute] string playerid,
            [FromBody] SetGamertagRequestModel model)
        {
            var player = await _store.GetPlayerDetailsByUserIdAsync(playerid);

            if (player == null)
            {
                player = new Player {
                    UserId = playerid
                };
            }
            if (!string.IsNullOrEmpty(player.Gamertag))
            {
                _logger.LogInformation("Player already has gamertag (cannot update) in SetGamertagForPlayerId");
                _appMonitor.LogEvent("RegisterFailed", properties: new Dictionary <string, string> {
                    { "Reason", "UserAlreadyHasGamertag" },
                    { "Source", "Interactive" }
                });
                return(this.ValidationFailed(new ErrorDetail("gamertag", "Cannot update gamertag")));
            }

            player.Gamertag = model.Gamertag;
            await _store.SavePlayerAsync(player);

            _appMonitor.LogEvent("RegisterSucceeded", properties: new Dictionary <string, string> {
                { "Reason", "UserAlreadyHasGamertag" },
                { "Source", "Interactive" }
            });

            return(Ok());
        }
        public async Task <ActionResult> SetGamertagForPlayerId(
            [FromRoute] string playerid,
            [FromBody] SetGamertagRequestModel model)
        {
            if (!ModelState.IsValid)
            {
                _logger.LogInformation("Invalid model state in SetGamertagForPlayerId");
                return(BadRequest());
            }

            var player = await _store.GetPlayerDetailsByUserIdAsync(playerid);

            if (player == null)
            {
                player = new Player {
                    UserId = playerid
                };
            }
            if (!string.IsNullOrEmpty(player.Gamertag))
            {
                _logger.LogInformation("Player already has gamertag (cannot update) in SetGamertagForPlayerId");
                return(BadRequest());
            }

            player.Gamertag = model.Gamertag;
            await _store.SavePlayerAsync(player);

            return(Ok());
        }
Пример #5
0
        public async Task <ActionResult> Post([FromBody] PlayerPostRequestModel newPlayer)
        {
            if (!ModelState.IsValid)
            {
                // TODO log and return validation message
                return(BadRequest());
            }

            // Save player
            var player = new Player
            {
                UserId    = newPlayer.UserId,
                Gamertag  = newPlayer.Gamertag,
                Country   = newPlayer.Country,
                CustomTag = newPlayer.CustomTag
            };
            await _store.SavePlayerAsync(player);

            // Return result
            return(CreatedAtRoute(nameof(GetPlayer), new { gamertag = player.Gamertag }, null));
        }
Пример #6
0
        public async Task <IActionResult> PutCurrentPlayer([FromBody] PlayerPutRequestModel player)
        {
            string userId = User.GetId();

            bool newPlayer    = false;
            var  playerEntity = await _store.GetPlayerDetailsByUserIdAsync(userId);

            if (playerEntity == null)
            {
                newPlayer = true;
                if (player.Gamertag != null)
                {
                    // check if gamertag is already in use
                    var existingPlayerForGamertag = await _store.GetPlayerDetailsByUserIdAsync(player.Gamertag);

                    if (existingPlayerForGamertag != null && existingPlayerForGamertag.UserId != userId)
                    {
                        // Can't use a gamertag from another user
                        return(this.ValidationFailed(new ErrorDetail("gamertag", "Gamertag already in use")));
                    }
                }
                playerEntity = new Player
                {
                    UserId    = userId,
                    Gamertag  = player.Gamertag,
                    Country   = player.Country,
                    CustomTag = player.CustomTag
                };
            }
            else
            {
                if (playerEntity.Gamertag != player.Gamertag)
                {
                    // can't change gamertag
                    return(this.ValidationFailed(new ErrorDetail("gamertag", "Can't change gamertag")));
                }
                playerEntity.Country   = player.Country;
                playerEntity.CustomTag = player.CustomTag;
            }
            // Update player
            await _store.SavePlayerAsync(playerEntity);

            // is this a new player registration?
            if (newPlayer)
            {
                _appMonitor.LogEvent("Register");
            }

            // Return result
            return(NoContent());
        }
Пример #7
0
        public async Task <IActionResult> PutCurrentPlayer([FromBody] PlayerPutRequestModel player)
        {
            string userId = User.GetId();

            // prevent modifying gamertag
            var existingPlayerForGamertag = await _store.GetPlayerDetailsByGamertagAsync(player.Gamertag);

            if (existingPlayerForGamertag != null && existingPlayerForGamertag.UserId != userId)
            {
                // Can't use a gamertag from another user
                return(this.ValidationFailed(new ErrorDetail("gamertag", "Gamertag already in use")));
            }

            var playerEntity = await _store.GetPlayerDetailsByUserIdAsync(userId);

            if (playerEntity == null)
            {
                playerEntity = new Player
                {
                    UserId    = userId,
                    Gamertag  = player.Gamertag,
                    Country   = player.Country,
                    CustomTag = player.CustomTag
                };
            }
            else
            {
                if (playerEntity.Gamertag != player.Gamertag)
                {
                    // can't change gamertag
                    return(this.ValidationFailed(new ErrorDetail("gamertag", "Can't change gamertag")));
                }
                playerEntity.Country   = player.Country;
                playerEntity.CustomTag = player.CustomTag;
            }

            // Update player
            await _store.SavePlayerAsync(playerEntity);

            // Return result
            return(NoContent());
        }
        public async Task <IActionResult> SetGamertagForPlayerId(
            [FromRoute] string playerid,
            [FromBody] SetGamertagRequestModel model)
        {
            var player = await _store.GetPlayerDetailsByUserIdAsync(playerid);

            if (player == null)
            {
                player = new Player {
                    UserId = playerid
                };
            }
            if (!string.IsNullOrEmpty(player.Gamertag))
            {
                _logger.LogInformation("Player already has gamertag (cannot update) in SetGamertagForPlayerId");
                return(this.ValidationFailed(new ErrorDetail("gamertag", "Cannot update gamertag")));
            }

            player.Gamertag = model.Gamertag;
            await _store.SavePlayerAsync(player);

            return(Ok());
        }