public async Task <IActionResult> Run( [HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] HttpRequest req, [Queue("messagetomom")] IAsyncCollector <MessageToMom> letterCollector, ILogger log) { log.LogInformation("C# HTTP trigger function processed a request."); //TODO model HttpRequest from fields of MessageToMom string id = req.Query["id"]; //Map new model values (from HttpRequest) to MessageToMom below var message = new MessageToMom { Flattery = new List <string> { "amazing", "fabulous", "profitable" }, Greeting = "So Good To Hear From You", HowMuch = 1222.22M, HowSoon = DateTime.UtcNow.AddDays(1), From = "*****@*****.**" }; await letterCollector.AddAsync(message); return((ActionResult) new OkObjectResult($"Hello, Johnny {message.Greeting} {message.HowMuch}{message.HowSoon}")); }
public async Task <IActionResult> Run([HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] HttpRequest request, [Queue(Literals.messagetomom)] IAsyncCollector <MessageToMom> messageToMomCollector, ILogger logger) { logger.LogInformation("--------------New message to mom received...--------------"); try { logger.LogInformation("Parsing message..."); //Read Request Body string requestBody = await new StreamReader(request.Body).ReadToEndAsync(); if (string.IsNullOrWhiteSpace(requestBody)) { throw new InvalidDataException("Message body required."); } //Map HttpRequest from fields of MessageToMom MessageToMom message = JsonConvert.DeserializeObject <MessageToMom>(requestBody); //Add Message to Queue logger.LogInformation("Updating queue..."); await messageToMomCollector.AddAsync(message); logger.LogInformation("--------------Queue updated.--------------"); return(new OkObjectResult(message.Greeting)); } catch (Exception e) { logger.LogError(e.ToString()); return(new BadRequestObjectResult(e)); } }
public async Task RunTest() { //Arrange var messageToMom = new MessageToMom { From = "*****@*****.**", HowSoon = new DateTime(2021, 2, 1), Greeting = "So Good To Hear From You", HowMuch = 1222.22m, Flattery = new List <string> { "amazing", "fabulous", "profitable" }, SubmittedDate = new DateTime(2021, 1, 27) }; var query = new Dictionary <string, StringValues>(); var body = JsonConvert.SerializeObject(messageToMom, Formatting.Indented); var collector = new CollectorMock <MessageToMom>(); //Act var actual = (OkObjectResult)await new ApiFunction().Run(new HttpRequestMock().HttpRequest(query, body), collector.Collector(), new LoggerMock().Logger()); //Assert message was processed successfully Assert.AreEqual(messageToMom.Greeting, actual.Value); //Assert message has been added to Queue Assert.IsTrue(collector.Items.Count > 0); }
public async Task Run([QueueTrigger("messagetomom", Connection = "")] MessageToMom myQueueItem, [Queue("outputletter")] IAsyncCollector <FormLetter> letterCollector, ILogger log) { log.LogInformation($"{myQueueItem.Greeting} {myQueueItem.HowMuch} {myQueueItem.HowSoon}"); log.LogInformation($"C# Queue trigger function processed: {myQueueItem}"); //TODO parse flattery list into comma separated string var str = String.Join(",", myQueueItem.Flattery); log.LogInformation($"{str}"); //TODO populate Header with salutation comma separated string and "Mother" var newstr = myQueueItem.Greeting + (", \"Mother\""); //TODO calculate likelihood of receiving loan based on this decision tree // 100 percent likelihood (initial value) minus the probability expressed from the quotient of howmuch and the total maximum amount ($10000) FormLetter formLetter = new FormLetter(); var calculateliklihood = 100 - (myQueueItem.HowMuch / 10000); formLetter.Likelihood = Convert.ToDouble(calculateliklihood); //TODO calculate approximate actual date of loan receipt based on this decision tree // funds will be made available 10 business days after day of submission // business days are weekdays, there are no holidays that are applicable var Calculatedate = myQueueItem.HowSoon; if (myQueueItem.HowSoon.Value.DayOfWeek == DayOfWeek.Sunday) { Calculatedate = myQueueItem.HowSoon.Value.AddDays(15); } else if (myQueueItem.HowSoon.Value.DayOfWeek == DayOfWeek.Saturday) { Calculatedate = myQueueItem.HowSoon.Value.AddDays(16); } else { Calculatedate = myQueueItem.HowSoon.Value.AddDays(14); } //TODO use new values to populate letter values per the following: //Body:"Really need help: I need $5523.23 by December 12,2020" //ExpectedDate = calculated date //RequestedDate = howsoon //Heading=Greeting //Likelihood = calculated likelihood await letterCollector.AddAsync(new FormLetter { Body = "Really need help: I need $5523.23 by December 12,2020", ExpectedDate = (DateTime)Calculatedate, RequestedDate = (DateTime)myQueueItem.HowSoon, Heading = newstr, Likelihood = formLetter.Likelihood }); }
public void ComposeTest() { //Arrange var messageToMom = new MessageToMom { From = "*****@*****.**", HowSoon = new DateTime(2021, 2, 1), Greeting = "So Good To Hear From You", HowMuch = 1222.22m, Flattery = new List<string> { "amazing", "fabulous", "profitable" }, SubmittedDate = new DateTime(2021, 1, 27) }; var expected = new FormLetter { Heading = "Amazing, Fabulous, Profitable Mother, So Good To Hear From You", Likelihood = default,
public async Task RunTest() { //Arrange var messageToMom = new MessageToMom { From = "*****@*****.**", HowSoon = new DateTime(2021, 2, 1), Greeting = "So Good To Hear From You", HowMuch = 1222.22m, Flattery = new List <string> { "amazing", "fabulous", "profitable" }, SubmittedDate = new DateTime(2021, 1, 27) }; var expected = new FormLetter { Heading = "Amazing, Fabulous, Profitable Mother, So Good To Hear From You", Likelihood = 99.877778, ExpectedDate = new DateTime(2021, 2, 10), RequestedDate = new DateTime(2021, 2, 1), Body = "Really need help: I need $1,222.22 by February 01, 2021" }; var collector = new CollectorMock <FormLetter>(); //Act await new CalculateDatesAndAmountsFunction().Run(messageToMom, collector.Collector(), new LoggerMock().Logger()); //Assert //Assert message has been added to Queue Assert.IsTrue(collector.Items.Count > 0); //Assert item added to queue is as expected FormLetter actual = collector.Items[0]; Assert.AreEqual(expected.Heading, actual.Heading); Assert.AreEqual(expected.Likelihood, actual.Likelihood); Assert.AreEqual(expected.ExpectedDate, actual.ExpectedDate); Assert.AreEqual(expected.RequestedDate, actual.RequestedDate); Assert.AreEqual(expected.Body, actual.Body); }
public async Task <IActionResult> Run( [HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] HttpRequest req, [Queue("messagetomom")] IAsyncCollector <MessageToMom> letterCollector, ILogger log) { log.LogInformation("C# HTTP trigger function processed a request."); // Validate data from HttpRequest. var valid = validateRequest(req); if (!valid.valid) { return((ActionResult) new BadRequestObjectResult(valid.errorMessage)); } // Handle multiple flattery values from req. string flattery = req.Query["flattery"]; string[] flatteyArray = flattery.Split(","); List <string> flatteryList = new List <string>(flatteyArray); // Handle a request that doesn't include an explicit HowSoon date. DateTime?howsoon = null; if ((string)req.Query["howsoon"] != null && (string)req.Query["howsoon"] != "") { howsoon = DateTime.Parse(req.Query["howsoon"]); } var message = new MessageToMom { Flattery = flatteryList, Greeting = req.Query["greeting"], HowMuch = decimal.Parse(req.Query["howmuch"]), HowSoon = howsoon, From = req.Query["from"] }; await letterCollector.AddAsync(message); return((ActionResult) new OkObjectResult($"Success")); }
public async Task Run([QueueTrigger(Literals.messagetomom, Connection = "")] MessageToMom messageToMom, [Queue(Literals.outputletter)] IAsyncCollector <FormLetter> outputLetterCollector, ILogger logger) { logger.LogInformation($"--------------Queue trigger function processed...--------------"); logger.LogInformation($"{messageToMom.Greeting} {messageToMom.HowMuch} {messageToMom.HowSoon}"); try { //Create Letter Composer to create the Form Letter based from Message To Mom Values //Use Loan Calculator to calculate expected date and likelihood // passing number of processing days and maximum loanable amount await outputLetterCollector.AddAsync(new LetterComposer(new LoanCalculator(10, 10000), messageToMom).Compose()); logger.LogInformation("--------------Letter Queue updated.--------------"); } catch (Exception e) { logger.LogError(e.ToString()); } }
public async Task Run([QueueTrigger("messagetomom", Connection = "")] MessageToMom myQueueItem, [Queue("outputletter")] IAsyncCollector <FormLetter> letterCollector, ILogger log) { log.LogInformation($"C# Queue trigger function processed: {myQueueItem}"); decimal maximumAmount = 10000.00M; int businessDaysToProcessLoan = 10; FormLetter formLetter = new FormLetter { Heading = $"{myQueueItem.Greeting} {string.Join(", ", myQueueItem.Flattery)} Mother", Likelihood = calculateLoanLikelihood(maximumAmount, myQueueItem.HowMuch), ExpectedDate = calculateApproximateLoanDate(DateTime.UtcNow, businessDaysToProcessLoan), RequestedDate = myQueueItem.HowSoon ?? calculateApproximateLoanDate(DateTime.UtcNow, businessDaysToProcessLoan), Body = $"Really need help: I need ${myQueueItem.HowMuch} by " + $"{myQueueItem.HowSoon ?? calculateApproximateLoanDate(DateTime.UtcNow, businessDaysToProcessLoan)}." }; await letterCollector.AddAsync(formLetter); }
public LetterComposer(ILoanCalculator loanProcessor, MessageToMom messageToMom) { _messageToMom = messageToMom; _loanProcessor = loanProcessor; }
public async Task Run([QueueTrigger("messagetomom", Connection = "AzureWebJobsStorage")] MessageToMom myQueueItem, [Queue("outputletter")] IAsyncCollector <FormLetter> letterCollector, ILogger log) { log.LogInformation($"{myQueueItem.Greeting} {myQueueItem.HowMuch} {myQueueItem.HowSoon}"); log.LogInformation($"C# Queue trigger function processed: {myQueueItem}"); //TODO parse flattery list into comma separated string //here I grabbed the information from myQueueItem and created a new string from it. string parsed = $"{myQueueItem.Flattery[0]}" + ", " + $"{myQueueItem.Flattery[1]}" + ", " + $"{myQueueItem.Flattery[2]}"; log.LogInformation($"{parsed}"); //TODO populate Header with salutation comma separated string and "Mother" //Not sure if the point was to use the myQueue.greeting so i did both possibilities string salutations2 = $"{myQueueItem.Greeting}, Mother"; FormLetter p = new FormLetter(); p.Heading = ($"salutation" + ", " + $"Mother"); //TODO calculate likelihood of receiving loan based on this decision tree // 100 percent likelihood (initial value) minus the probability expressed from the quotient of howmuch and the total maximum amount ($10000) //Not sure if I understood the goal of this one but it was some easy math. //grab the variable from myQueueItem.howMuch var division = (10000 / myQueueItem.HowMuch); var percent = (100 - division); log.LogInformation($"{percent}"); //TODO calculate approximate actual date of loan receipt based on this decision tree // funds will be made available 10 business days after day of submission // business days are weekdays, there are no holidays that are applicable //For this I grabbed the current DateTime, found out what day of the week that was. //Then ran that through some if else statements to figure out when the loan would be due. var dt = DateTime.Now; var day = dt.DayOfWeek; log.LogInformation($"{dt.DayOfWeek}"); if (day == DayOfWeek.Monday || day == DayOfWeek.Tuesday || day == DayOfWeek.Wednesday || day == DayOfWeek.Thursday || day == DayOfWeek.Friday) { var dueDay = dt.AddDays(14); log.LogInformation($"The actual date of loan receipt is, " + $"{dueDay}"); } else if (day == DayOfWeek.Saturday) { var dueDay = dt.AddDays(13); log.LogInformation($"The actual date of loan receipt is, " + $"{dueDay}"); } else if (day == DayOfWeek.Sunday) { var dueDay = dt.AddDays(12); log.LogInformation($"The actual date of loan receipt is, " + $"{dueDay}"); } //TODO use new values to populate letter values per the following: //Body:"Really need help: I need $5523.23 by December 12,2020" //ExpectedDate = calculated date //RequestedDate = howsoon //Heading=Greeting //Likelihood = calculated likelihood //for this I created a new FormLetter and defined some variables that I would need inside. FormLetter help = new FormLetter(); dt = DateTime.Now; day = dt.DayOfWeek; { var expected = dt; if (day == DayOfWeek.Monday || day == DayOfWeek.Tuesday || day == DayOfWeek.Wednesday || day == DayOfWeek.Thursday || day == DayOfWeek.Friday) { var dueDay = dt.AddDays(14); /* log.LogInformation($"The actual date of loan receipt is, " + $"{dueDay}");*/ expected = dueDay; } else if (day == DayOfWeek.Saturday) { var dueDay = dt.AddDays(13); expected = dueDay; } else if (day == DayOfWeek.Sunday) { var dueDay = dt.AddDays(12); expected = dueDay; } log.LogInformation($"This is in calculaeDates, {expected}"); string reallyNeedHelp = "Really need help: I need $5523.23 by December 12,2020"; DateTime requestDate = new DateTime(2020, 12, 12); //Then I applied all these variables into the FormLetter format. { help.Heading = $"{myQueueItem.Greeting}"; help.Likelihood = (100 - (10000 / 5523.23)); help.ExpectedDate = expected; help.RequestedDate = requestDate; help.Body = reallyNeedHelp; }; log.LogInformation($"This is the expected date, { expected}"); } await letterCollector.AddAsync(help); log.LogInformation($"{help.Heading}" + $"The likelihood of being about to make a loan in that amount is, " + $"{help.Likelihood}"); }