private T GetMappedResult <T>(ResourceResponse <Document> upsertResponse) where T : ContentModelBase
        {
            string resourceType = upsertResponse.Resource.GetPropertyValue <string>("contentType");

            switch (resourceType)
            {
            case "Banner":
                BannerContentDocument bannerDoc = (dynamic)upsertResponse.Resource;
                return(_map.Mapper.Map <T>(bannerDoc));

            case "Simple":
                SimpleContentDocument simpleDoc = (dynamic)upsertResponse.Resource;
                return(_map.Mapper.Map <T>(simpleDoc));

            case "ListLanding":
                ListLandingContentDocument listDoc = (dynamic)upsertResponse.Resource;
                return(_map.Mapper.Map <T>(listDoc));

            case "ListItem":
                ListDetailContentDocument listItemDoc = (dynamic)upsertResponse.Resource;
                return(_map.Mapper.Map <T>(listItemDoc));

            case "MediaGallery":
                MediaGalleryContentDocument mediaDoc = (dynamic)upsertResponse.Resource;
                return(_map.Mapper.Map <T>(mediaDoc));

            default:
                return(null);
            }
        }
        public async Task <ContentModelBase> GetContentAsync(string contentId)
        {
            SiteContentItemDocument content = null;
            //get content from docdb
            //create document query
            var query = (from cont in _docDbClient.CreateDocumentQuery <SiteContentItemDocument>(_config.SiteContentCollectionUrl)
                         where cont.Id == contentId
                         select cont).AsDocumentQuery();

            //async request of query results
            var response = await query.ExecuteNextAsync <SiteContentItemDocument>().ConfigureAwait(false);

            if (response.Count == 1)
            {
                // we got some data, so populate the content item
                content = response.FirstOrDefault();
            }
            //if we got content from the db, map to the model type
            if (content != null)
            {
                ContentModelBase mappedResult;

                switch (content.ContentType)
                {
                case "Banner":
                    BannerContentDocument bannerDoc = (dynamic)content;
                    mappedResult = _map.Mapper.Map <BannerContentDocument, BannerContent>(bannerDoc);
                    break;

                case "Simple":
                    SimpleContentDocument simpleDoc = (dynamic)content;
                    mappedResult = _map.Mapper.Map <SimpleContentDocument, SimpleContent>(simpleDoc);
                    break;

                case "ListLanding":
                    ListLandingContentDocument listDoc = (dynamic)content;
                    mappedResult = _map.Mapper.Map <ListLandingContentDocument, ListLandingContent>(listDoc);
                    break;

                case "ListItem":
                    ListDetailContentDocument listItemDoc = (dynamic)content;
                    mappedResult = _map.Mapper.Map <ListDetailContentDocument, ListItemContent>(listItemDoc);
                    break;

                case "MediaGallery":
                    MediaGalleryContentDocument mediaDoc = (dynamic)content;
                    mappedResult = _map.Mapper.Map <MediaGalleryContentDocument, MediaGalleryContent>(mediaDoc);
                    break;

                default:
                    return(null);
                }

                return(mappedResult);
            }
            else
            {
                return(null);
            }
        }