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