public static async Task RunAsync(
            [QueueTrigger("userUpdatesQueue")] string user,
            [Table("Costs")] CloudTable costsTable,
            [Table("CostsByMonth")] CloudTable costsByMonthTable,
            ILogger log)
        {
            log.LogInformation($"Regenerating Read Models for User '{user}'");

            var costs = await CostTable.GetCostsForUser(user, costsTable);

            var monthlyUserCosts =
                costs
                .GroupBy(cost => cost.Date.Year.ToString() + "-" + cost.Date.Month.ToString("D2"))
                .Select(monthGroup =>
                        new MonthlySummaryTableEntity {
                PartitionKey = user,
                RowKey       = monthGroup.Key,
                Month        = monthGroup.Key,
                User         = user,
                ValuePence   = (int)(monthGroup.Sum(cost => cost.Value) * 100)
            });

            foreach (var monthlyUserCost in monthlyUserCosts)
            {
                await costsByMonthTable.ExecuteAsync(TableOperation.InsertOrReplace(monthlyUserCost));
            }
        }
        public static async Task <IActionResult> Run(
            [HttpTrigger(AuthorizationLevel.Function, "get", Route = "Costs/{User}")] HttpRequest req,
            [Table("Costs")] CloudTable costsTable,
            string User,
            ILogger log)
        {
            log.LogInformation($"Get Costs/{User} Called");

            var costs = await CostTable.GetCostsForUser(User, costsTable);

            var sortedCosts = costs.OrderByDescending(cost => cost.Date);

            var outputCosts = sortedCosts.Select(cost => new CostOutputModel {
                Item  = cost.Item,
                Value = cost.Value,
                Date  = cost.Date.LocalDateTime.ToString("dd-MMM-yyyy")
            });

            return(new JsonResult(outputCosts));
        }