{
"bindings": [
"type": "httpTrigger",
"direction": "in",
"name": "req",
"methods": [
"post"
],
"authLevel": "function"
},
"type": "http",
"direction": "out",
"name": "res"
}
"disabled": false
"frameworks": {
"net46":{
"dependencies": {
"EntityFramework": "6.1.2",
"System.Data.Common": "4.3.0"
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "...",
"AzureWebJobsDashboard": "...",
"SQLAZURECONNSTR_PieShopConnectionString": "Data Source=..."
using System;
using System.Linq;
using System.Net;
using System.Data;
using System.Data.Entity;
public static async Task<
HttpResponseMessage
> Run(HttpRequestMessage req, TraceWriter log)
InventoryEntryData entry = await req.Content.ReadAsAsync<
InventoryEntryData
>();
if (entry == null)
// were they sent in query?
var parameters = req.GetQueryNameValuePairs().ToList();
var ingredient = parameters.Where(parameter => parameter.Key == "IngredientId").Select(parameter => parameter.Value);
var inventory = parameters.Where(parameter => parameter.Key == "InventoryId").Select(parameter => parameter.Value);
var quantity = parameters.Where(parameter => parameter.Key == "Quantity").Select(parameter => parameter.Value);
if(ingredient.Count() == 1 && inventory.Count() == 1 && quantity.Count() == 1)
entry = new InventoryEntryData
IngredientId = int.Parse(ingredient.First()),
InventoryId = int.Parse(inventory.First()),
Quantity = int.Parse(quantity.First()),
};
else
return req.CreateResponse(HttpStatusCode.BadRequest, "Please pass a valid InventoryEntry in the request body");
try
using (var context = new DbContext(System.Environment.GetEnvironmentVariable("SQLAZURECONNSTR_PieShopConnectionString")))
context.Database.Connection.Open();
context.Database.ExecuteSqlCommand(string.Format("INSERT INTO ledger.InventoryEntries(InventoryId, IngredientId, Quantity) VALUES ({0}, {1}, {2}) ", entry.InventoryId, entry.IngredientId, entry.Quantity));
context.Database.Connection.Close();
catch(System.Data.Entity.Infrastructure.DbUpdateException ex)
log.Info(string.Format("Failure with database update {0}.", ex.Message));
return req.CreateResponse(HttpStatusCode.BadRequest, string.Format("Failure updating inventory. Please verify the ingredient id {0} inventory id {1} and quantity {2} are correct.", entry.IngredientId, entry.InventoryId, entry.Quantity));
catch(Exception ex)
log.Info(string.Format("Failure during processing {0}.", ex.Message));
return req.CreateResponse(HttpStatusCode.InternalServerError, "UpdateInventory api is currently not available.");
return req.CreateResponse(HttpStatusCode.Created);
public class InventoryEntryData
public int InventoryId { get; set; }
public int IngredientId { get; set; }
public int Quantity { get; set; }