public virtual async Task <HttpResponseMessage> ImportSent([FromBody] IEnumerable <ImportSentCommunicationApiModel> importCommunications)
        {
            if (importCommunications == null || importCommunications.Count() == 0)
            {
                return(ControllerContext.Request.CreateResponse(System.Net.HttpStatusCode.OK, new
                {
                    Message = "An empty communication payload was specified."
                }));
            }

            var addedInfo = new List <ImportSentCommunicationResultApiModel>();

            using (var rockContext = new Rock.Data.RockContext())
            {
                var committed = false;
                rockContext.WrapTransaction(() =>
                {
                    var communicationsWithStatusSet = new List <Model.Communication>();

                    foreach (var importCommunication in importCommunications)
                    {
                        if (importCommunication == null)
                        {
                            continue;
                        }

                        // Map ApiModel properties to Entity model properties for Communication
                        var communicationToAdd = importCommunication.CreateMapped <Model.Communication>();

                        var sentDateTime = (importCommunication?.SendDateTime).GetValueOrDefault(RockDateTime.Now);

                        // Set properties from the POST payload
                        communicationToAdd.CreatedDateTime  = sentDateTime;
                        communicationToAdd.ModifiedDateTime = sentDateTime;
                        communicationToAdd.SendDateTime     = sentDateTime;
                        communicationToAdd.Status           = Model.CommunicationStatus.Approved;

                        communicationToAdd = rockContext.Communications.Add(communicationToAdd);

                        var recipientsCount = (importCommunication.Recipients?.Count).GetValueOrDefault(0);

                        // Add the communication Guid that is associated with the payload
                        addedInfo.Add(new ImportSentCommunicationResultApiModel
                        {
                            CommunicationCount = importCommunications.Count(),
                            Details            = new ImportSentCommunicationResultDetailsApiModel
                            {
                                CommunicationGuid           = communicationToAdd.Guid,
                                CommunicationRecipientGuids = new List <System.Guid>(recipientsCount),
                                RecipientCount = recipientsCount
                            }
                        });

                        // Add the communication recipient
                        foreach (var importCommunicationRecipient in importCommunication.Recipients)
                        {
                            if (importCommunicationRecipient == null)
                            {
                                continue;
                            }

                            // Map ApiModel properties to Entity model properties for CommunicationRecipient
                            var importCommunicationRecipientToAdd = importCommunicationRecipient.CreateMapped <Model.CommunicationRecipient>();

                            importCommunicationRecipientToAdd.Status        = Model.CommunicationRecipientStatus.Delivered;
                            importCommunicationRecipientToAdd.Communication = communicationToAdd;

                            rockContext.CommunicationRecipients.Add(importCommunicationRecipientToAdd);

                            // Add the recipient Guid(s) that are associated with the parent communication
                            var infoItem = addedInfo.FirstOrDefault(v => v.Details.CommunicationGuid == communicationToAdd.Guid);
                            if (infoItem != null)
                            {
                                infoItem.Details.CommunicationRecipientGuids.Add(importCommunicationRecipientToAdd.Guid);
                            }
                        }
                    }
                    committed = true;
                });

                if (committed)
                {
                    //Write the transaction to the database
                    await rockContext.SaveChangesAsync();
                }

                return(ControllerContext.Request.CreateResponse(System.Net.HttpStatusCode.OK, new
                {
                    Message = "Communications Imported: Response",
                    CommunicationsAdded = addedInfo
                }));
            }
        }