Beispiel #1
0
        public async Task <ActionResult <Character> > PostMultipleCharacters(PostCharactersRequest postCharactersRequest)
        {
            HttpContext.VerifyUserHasAnyAcceptedScope("api.writeCharacterData");

            var userId = User.FindFirst(ClaimTypes.NameIdentifier)?.Value;

            if (string.IsNullOrWhiteSpace(userId))
            {
                return(BadRequest("No userId found."));
            }

            var blobContainerClient      = new BlobContainerClient(_configuration["StorageAccountConnectionString"], "characters");
            var currentCharactersForUser = await _characterManager.GetRawCharacterBlobsAsync(blobContainerClient, userId);

            if (currentCharactersForUser.Count >= _characterLimitPerUser)
            {
                return(BadRequest($"User already has {_characterLimitPerUser} characters saved."));
            }

            var characters = new List <Character>();

            var numberOfCharactersToAdd =
                _characterLimitPerUser - currentCharactersForUser.Count < postCharactersRequest.CharacterRequests.Count
                    ? _characterLimitPerUser - currentCharactersForUser.Count
                    : postCharactersRequest.CharacterRequests.Count;

            foreach (var postCharacterRequest in postCharactersRequest.CharacterRequests.Take(numberOfCharactersToAdd))
            {
                if (!string.IsNullOrWhiteSpace(postCharacterRequest.Id) &&
                    !Guid.TryParse(postCharacterRequest.Id, out _))
                {
                    return(BadRequest("Invalid character Id."));
                }

                var permission = CharacterPermissionLevel.Owner;
                if (!string.IsNullOrWhiteSpace(postCharacterRequest.Id))
                {
                    permission =
                        await _characterManager.CheckCharacterPermissionLevelForUser(postCharacterRequest.Id, userId);

                    if (permission != CharacterPermissionLevel.Owner && permission != CharacterPermissionLevel.Write)
                    {
                        return(BadRequest($"User does not have permission to change character {postCharacterRequest.Id}."));
                    }
                }

                var newCharacter =
                    await _characterManager.SaveCharacterAsync(postCharacterRequest, userId, permission);

                characters.Add(newCharacter);
            }

            return(Ok(characters));
        }
Beispiel #2
0
        public async Task <ActionResult <Character> > PostMultipleCharacters(PostCharactersRequest postCharactersRequest)
        {
            HttpContext.VerifyUserHasAnyAcceptedScope("api.writeCharacterData");

            var userId = User.FindFirst(ClaimTypes.NameIdentifier)?.Value;

            if (string.IsNullOrWhiteSpace(userId))
            {
                return(BadRequest("No userId found."));
            }

            var currentCharactersForUser = await _characterManager.GetRawCharacterBlobsAsync(userId);

            if (currentCharactersForUser.Count >= 20)
            {
                return(BadRequest("User already has 20 characters saved."));
            }

            var characters = new List <Character>();

            var numberOfCharactersToAdd =
                20 - currentCharactersForUser.Count < postCharactersRequest.CharacterRequests.Count
                    ? 20 - currentCharactersForUser.Count
                    : postCharactersRequest.CharacterRequests.Count;

            foreach (var postCharacterRequest in postCharactersRequest.CharacterRequests.Take(numberOfCharactersToAdd))
            {
                if (!string.IsNullOrWhiteSpace(postCharacterRequest.Id) &&
                    !Guid.TryParse(postCharacterRequest.Id, out _))
                {
                    return(BadRequest("Invalid character Id."));
                }

                var newCharacter =
                    await _characterManager.SaveCharacterAsync(postCharacterRequest, userId);

                characters.Add(newCharacter);
            }

            return(Ok(characters));
        }