public async Task <IActionResult> UpdateBaseKit( [HttpTrigger(AuthorizationLevel.Anonymous, "put", Route = null)] HttpRequest req, [CosmosDB(databaseName: "2wr", collectionName: "basekits", ConnectionStringSetting = "CosmosDBConnection")] DocumentClient client, ILogger log) { log.LogInformation($"Updating a base kit"); var authorizationResult = await _apiAuthentication.AuthenticateAsync(req.Headers); if (authorizationResult.Failed) { log.LogWarning(authorizationResult.FailureReason); return(new UnauthorizedResult()); } if (!authorizationResult.IsInRole(Roles.Admin)) { log.LogWarning($"User is not in the {Roles.Admin} role"); return(new UnauthorizedResult()); } var content = await new StreamReader(req.Body).ReadToEndAsync(); var kit = JsonConvert.DeserializeObject <BaseKit>(content); //verify existing document (not upserting as this is an update only function) var baseKitUri = UriFactory.CreateDocumentUri("2wr", "basekits", kit.Id); BaseKit existingKit = null; try { existingKit = (await client.ReadDocumentAsync <BaseKit>(baseKitUri, new RequestOptions { PartitionKey = new PartitionKey(kit.Id) })).Document; } catch (DocumentClientException ex) { if (ex.StatusCode == System.Net.HttpStatusCode.NotFound) { log.LogWarning($"Base Kit: {kit.Id} not found."); return(new BadRequestObjectResult("Base Kit not found.")); } } if (kit.Items.Count > 0) { kit.Items.ForEach(ki => { if (String.IsNullOrWhiteSpace(ki.Id)) { ki.Id = Guid.NewGuid().ToString(); } }); } Document document = await client.ReplaceDocumentAsync(baseKitUri, kit, new RequestOptions { PartitionKey = new PartitionKey(existingKit.Id) }); return(new OkObjectResult(kit)); }
public async Task <IActionResult> DeleteBaseKit( [HttpTrigger(AuthorizationLevel.Anonymous, "delete", Route = "basekit-delete/{id}")] HttpRequest req, string id, [CosmosDB(databaseName: "2wr", collectionName: "basekits", ConnectionStringSetting = "CosmosDBConnection")] DocumentClient client, ILogger log) { log.LogInformation($"Deleting a base kit"); var authorizationResult = await _apiAuthentication.AuthenticateAsync(req.Headers); if (authorizationResult.Failed) { log.LogWarning(authorizationResult.FailureReason); return(new UnauthorizedResult()); } if (!authorizationResult.IsInRole(Roles.Admin)) { log.LogWarning($"User is not in the {Roles.Admin} role"); return(new UnauthorizedResult()); } if (String.IsNullOrWhiteSpace(id)) { return(new BadRequestObjectResult("Base Kit id was not specified.")); } //verify existing document var baseKitUri = UriFactory.CreateDocumentUri("2wr", "basekits", id); BaseKit existingKit = null; try { existingKit = (await client.ReadDocumentAsync <BaseKit>(baseKitUri, new RequestOptions { PartitionKey = new PartitionKey(id) })).Document; } catch (DocumentClientException ex) { if (ex.StatusCode == System.Net.HttpStatusCode.NotFound) { log.LogWarning($"Base Kit: {id} not found."); return(new BadRequestObjectResult("Base Kit not found.")); } } Document document = await client.DeleteDocumentAsync(baseKitUri, new RequestOptions { PartitionKey = new PartitionKey(existingKit.Id) }); return(new OkObjectResult(true)); }
public async Task <IActionResult> CreateFromBaseKit( [HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = null)] HttpRequest req, [CosmosDB(databaseName: "2wr", collectionName: "emergencykits", ConnectionStringSetting = "CosmosDBConnection")] DocumentClient client, [CosmosDB(databaseName: "2wr", collectionName: "basekits", ConnectionStringSetting = "CosmosDBConnection")] DocumentClient baseKitClient, ILogger log) { log.LogInformation($"Creating a new kit off of a base kit"); var authorizationResult = await _apiAuthentication.AuthenticateAsync(req.Headers); if (authorizationResult.Failed) { log.LogWarning(authorizationResult.FailureReason); return(new UnauthorizedResult()); } Uri collectionUri = UriFactory.CreateDocumentCollectionUri("2wr", "emergencykits"); var content = await new StreamReader(req.Body).ReadToEndAsync(); var request = JsonConvert.DeserializeObject <CreateKitFromBaseRequest>(content); var kit = new Kit(); kit.Id = Guid.NewGuid().ToString(); kit.UserId = authorizationResult.User.Identity.Name; //Pull Base kit information by id, Add items from base kit, multiply quantity by the count var baseKitUri = UriFactory.CreateDocumentUri("2wr", "basekits", request.BaseKitId); BaseKit baseKit = null; try { baseKit = (await baseKitClient.ReadDocumentAsync <BaseKit>(baseKitUri, new RequestOptions { PartitionKey = new PartitionKey(request.BaseKitId) })).Document; } catch (DocumentClientException ex) { if (ex.StatusCode == System.Net.HttpStatusCode.NotFound) { log.LogWarning($"Base Kit: {request.BaseKitId} not found."); return(new BadRequestObjectResult("Base Kit not found.")); } } baseKit.Items.ForEach(bki => kit.Items.Add(new KitItem { Id = Guid.NewGuid().ToString(), UserId = authorizationResult.User.Identity.Name, Name = bki.Name, Description = bki.Description, Photo = bki.Photo, Quantity = bki.QuantityPerCount * request.Count, QuantityUnit = bki.QuantityUnit, IsAvailableInKit = false })); Document document = await client.CreateDocumentAsync(collectionUri, kit); return(new OkObjectResult(kit)); }