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)); } }
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 }); }