示例#1
0
        public async Task <ActionResult <Character> > Post(PostCharacterRequest characterRequest)
        {
            HttpContext.VerifyUserHasAnyAcceptedScope("api.writeCharacterData");

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

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

            if (!string.IsNullOrWhiteSpace(characterRequest.Id) && !Guid.TryParse(characterRequest.Id, out _))
            {
                return(BadRequest("Invalid character Id."));
            }

            var blobContainerClient = new BlobContainerClient(_configuration["StorageAccountConnectionString"], "characters");

            var currentCharactersForUser = await _characterManager.GetRawCharacterBlobsAsync(blobContainerClient, userId);

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

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

            return(Ok(newCharacter));
        }
        public async Task <IActionResult> PostCharacter([FromBody] PostCharacterRequest request)
        {
            request.CurrentUserId = GetCurrentUserId();

            var response = await _mediator.Send(request);;

            if (response != null)
            {
                return(CreatedAtAction("GetCharacter", new { id = response.Id }, response));
            }
            else
            {
                return(StatusCode(500));
            }
        }
示例#3
0
        public async Task <ActionResult <Character> > Post(PostCharacterRequest characterRequest)
        {
            HttpContext.VerifyUserHasAnyAcceptedScope("api.writeCharacterData");

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

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

            if (!string.IsNullOrWhiteSpace(characterRequest.Id) && !Guid.TryParse(characterRequest.Id, out _))
            {
                return(BadRequest("Invalid character Id."));
            }

            var blobContainerClient = new BlobContainerClient(_configuration["StorageAccountConnectionString"], "characters");

            var permission = CharacterPermissionLevel.Owner;

            if (!string.IsNullOrWhiteSpace(characterRequest.Id))
            {
                permission =
                    await _characterManager.CheckCharacterPermissionLevelForUser(characterRequest.Id, userId);

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

            var currentCharactersForUser = await _characterManager.GetRawCharacterBlobsAsync(blobContainerClient, userId);

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

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

            return(Ok(newCharacter));
        }
        public async Task <Character> SaveCharacterAsync(PostCharacterRequest characterRequest, string userId)
        {
            var blobContainer = _cloudBlobClient.GetContainerReference("characters");

            if (string.IsNullOrWhiteSpace(characterRequest.Id))
            {
                characterRequest.Id = Guid.NewGuid().ToString();
            }

            var blob = blobContainer.GetBlockBlobReference($"{userId}/{characterRequest.Id}.json");

            await blob.UploadTextAsync(characterRequest.JsonData);

            return(new Character
            {
                JsonData = characterRequest.JsonData,
                Id = characterRequest.Id,
                UserId = userId
            });
        }
        public async Task <Character> SaveCharacterAsync(PostCharacterRequest characterRequest, string userId,
                                                         CharacterPermissionLevel permission)
        {
            var blobContainerClient =
                new BlobContainerClient(_configuration["StorageAccountConnectionString"], "characters");
            await blobContainerClient.CreateIfNotExistsAsync();

            if (string.IsNullOrWhiteSpace(characterRequest.Id))
            {
                characterRequest.Id = Guid.NewGuid().ToString();
            }

            var blobClient = blobContainerClient.GetBlobClient($"{userId}/{characterRequest.Id}");

            var content = Encoding.UTF8.GetBytes(characterRequest.JsonData);

            await using var ms = new MemoryStream(content);
            await blobClient.UploadAsync(ms, true);

            var character = new Character
            {
                RowKey            = characterRequest.Id,
                PartitionKey      = ContentType.CommunityContent.ToString(),
                ContentSourceEnum = ContentSource.Community,
                ContentTypeEnum   = ContentType.CommunityContent,
                JsonData          = characterRequest.JsonData,
                Id = characterRequest.Id
            };

            if (permission == CharacterPermissionLevel.Owner)
            {
                character.UserId          = userId;
                character.UserPermissions = characterRequest.UserPermissions;
            }

            await _tableStorage.AddOrUpdateAsync("characters", character);

            return(character);
        }
        public async Task <Character> SaveCharacterAsync(PostCharacterRequest characterRequest, string userId)
        {
            var blobContainerClient = new BlobContainerClient(_configuration["StorageAccountConnectionString"], "characters");
            await blobContainerClient.CreateIfNotExistsAsync();

            if (string.IsNullOrWhiteSpace(characterRequest.Id))
            {
                characterRequest.Id = Guid.NewGuid().ToString();
            }

            var blobClient = blobContainerClient.GetBlobClient($"{userId}/{characterRequest.Id}");

            var content = Encoding.UTF8.GetBytes(characterRequest.JsonData);

            await using var ms = new MemoryStream(content);
            await blobClient.UploadAsync(ms, true);

            return(new Character
            {
                JsonData = characterRequest.JsonData,
                Id = characterRequest.Id,
                UserId = userId
            });
        }