/// <summary> /// Map InputModel to Feedback. /// </summary> /// <param name="feedback">Feedback input model to map.</param> /// <returns>Feedback</returns> public static Feedback MapToTableEntity(this FeedbackQueueItem feedback) => new Feedback { Email = feedback.Email, Tel = feedback.Tel, FullName = feedback.FullName, Message = feedback.Message };
public static async Task RunAsync([QueueTrigger("feedback-msgs")] FeedbackQueueItem feedbackQueueItem, [Table("Feedbacks")] CloudTable feedbacksTable, [Queue("send-emails")] ICollector <SendEmailQueueItem> sendEmailsQueue, [Blob("templates")] CloudBlobContainer container, ILogger logger) { #region save feedback to table. // use custom extention method to map input model to table entity derived class model. var feedback = feedbackQueueItem.MapToTableEntity(); // generate partition and row keys. feedback.GeneratePartitionAndRowKeys(feedback.Email, null); var insertIntoTableOperation = TableOperation.Insert(feedback); await feedbacksTable.ExecuteAsync(insertIntoTableOperation); #endregion #region prepare email body for restaurant. // get template from blob storage. using var restaurantEmailHtmlStream = new MemoryStream(); await container.GetBlockBlobReference("restaurant/NewFeedback.html") .DownloadToStreamAsync(restaurantEmailHtmlStream); var restaurantEmailHtmlStr = Encoding.UTF8.GetString(restaurantEmailHtmlStream.ToArray()); // todo: implement template value replacing here. #endregion #region send email to restaurant // enqueue to send emails queue. sendEmailsQueue.Add(new SendEmailQueueItem() { ReferenceToFeedbackRowKey = feedback.RowKey, HtmlContent = restaurantEmailHtmlStr, ReciepientAddress = "*****@*****.**", // todo: fix restaurant address. Subject = "Νέο Feedback!", }); #endregion }