/// <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
 };
예제 #2
0
        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
        }