public static async Task PopulateMeasures()

in Functions/Code/Facebook/FacebookUtillity/PageAnalyticsETL.cs [16:133]


        public static async Task<bool> PopulateMeasures(string pageId, string pageAccessToken, string sqlConnection, string sqlSchema, string getDataUntil)
        {
            string page = pageId;
            string accessToken = pageAccessToken;
            string sqlConn = sqlConnection;
            string schema = sqlSchema;
            string until = getDataUntil;
            try
            {
                var pageContentTable = DataTableUtility.GetPageContentTable();
                var pageEngagementTable = DataTableUtility.GetPageEngagementTable();
                var pageImpressionsTable = DataTableUtility.GePageImpressionsTable();
                var pagePostsTable = DataTableUtility.GetPagePostsTable();
                var pagePostEngagement = DataTableUtility.GetPagePostEngagementTable();
                var pagePostImpressions = DataTableUtility.GetPagePostImpressionsTable();
                var pagePostReactionsTable = DataTableUtility.GetPagePostReactionsTable();
                var pagePostStoriesAndPeopleTalkingAboutThisTable = DataTableUtility.GetPagePostStoriesAndPeopleTalkingAboutThisTable();
                var pageReactionsTable = DataTableUtility.GetPageReactionsTable();
                var pageUserDemographicsTable = DataTableUtility.GetPageUserDemographicsTable();
                var pageVideoPosts = DataTableUtility.GetPageVideoPostsTable();
                var pageVideoViews = DataTableUtility.GetPageVideoViewsTable();
                var pageViewsTable = DataTableUtility.GetPageViewsTable();
                var clicksTable = DataTableUtility.GetPageClicksDataTable();
                var postsInfoTable = DataTableUtility.GetPostsInfoTable();
                var postsToTable = DataTableUtility.GetPostsToTable();

                var content = await FacebookUtility.GetPageMetricAnalytics(page, until, accessToken, FacebookPageAnalyticsMetricGroups.PageContent);
                PopulateNestedValues(pageContentTable, content, page);

                var engagement = await FacebookUtility.GetPageMetricAnalytics(page, until, accessToken, FacebookPageAnalyticsMetricGroups.PageEngagement);
                PopulateNestedValues(pageEngagementTable, engagement, page);

                var impressions = await FacebookUtility.GetPageMetricAnalytics(page, until, accessToken, FacebookPageAnalyticsMetricGroups.PageImpressions);
                PopulateNestedValues(pageImpressionsTable, impressions, page);

                var pagePosts = await FacebookUtility.GetPageMetricAnalytics(page, until, accessToken, FacebookPageAnalyticsMetricGroups.PagePosts);
                PopulateNestedValues(pagePostsTable, pagePosts, page);

                var pagePostsEngagement = await FacebookUtility.GetPageMetricAnalytics(page, until, accessToken, FacebookPageAnalyticsMetricGroups.PagePostEngagement);
                PopulateNestedValues(pagePostEngagement, pagePostsEngagement, page);

                var pagePostsReactions = await FacebookUtility.GetPageMetricAnalytics(page, until, accessToken, FacebookPageAnalyticsMetricGroups.PagePostReactions);
                PopulateNestedValues(pagePostReactionsTable, pagePostsReactions, page);

                var pageReactions = await FacebookUtility.GetPageMetricAnalytics(page, until, accessToken, FacebookPageAnalyticsMetricGroups.PageReactions);
                PopulateNestedValues(pageReactionsTable, pageReactions, page);

                var pagePostStories = await FacebookUtility.GetPageMetricAnalytics(page, until, accessToken, FacebookPageAnalyticsMetricGroups.PagePostStoriesAndPeopleTalkingAboutThis);
                PopulateNestedValues(pagePostStoriesAndPeopleTalkingAboutThisTable, pagePostStories, page);

                var pageUserDemographics = await FacebookUtility.GetPageMetricAnalytics(page, until, accessToken, FacebookPageAnalyticsMetricGroups.PageUserDemographics);
                PopulateNestedValues(pageUserDemographicsTable, pageUserDemographics, page);

                var pageVideoViewsObj = await FacebookUtility.GetPageMetricAnalytics(page, until, accessToken, FacebookPageAnalyticsMetricGroups.PageVideoViews);
                PopulateNestedValues(pageVideoViews, pageVideoViewsObj, page);

                var pageViews = await FacebookUtility.GetPageMetricAnalytics(page, until, accessToken, FacebookPageAnalyticsMetricGroups.PageViews);
                PopulateNestedValues(pageViewsTable, pageViews, page);

                var clicks = await FacebookUtility.GetPageMetricAnalytics(page, until, accessToken, FacebookPageAnalyticsMetricGroups.PageCtaClicks);
                PopulateNestedValues(clicksTable, clicks, page);

                var pagePostIds = await FacebookUtility.GetPageMetricAnalytics(page, until, accessToken, FacebookPageAnalyticsMetricGroups.PagePostIds);
                PopulatePostsInfo(postsInfoTable, pagePostIds, page);
                PopulatePostsTo(postsToTable, pagePostIds, page);

                List<JObject> pagePostReactions = new List<JObject>();
                List<JObject> pageVideoPostsObj = new List<JObject>();
                List<JObject> pagePostsImpressions = new List<JObject>();
                if (pagePostIds != null)
                {
                    foreach (var entry in pagePostIds)
                    {
                        if (entry?["data"] != null)
                        {
                            foreach (var obj in entry["data"])
                            {
                                pagePostsImpressions.AddRange(await FacebookUtility.GetPageMetricAnalytics(obj["id"].ToString(), until, accessToken, FacebookPageAnalyticsMetricGroups.PagePostImpressions));
                                pageVideoPostsObj.AddRange(await FacebookUtility.GetPageMetricAnalytics(obj["id"].ToString(), until, accessToken, FacebookPageAnalyticsMetricGroups.PageVideoPosts));
                                pagePostReactions.AddRange(await FacebookUtility.GetPageMetricAnalytics(obj["id"].ToString(), until, accessToken, FacebookPageAnalyticsMetricGroups.PagePostReactions));
                            }
                        }
                    }
                }
                PopulateNestedValues(pagePostReactionsTable, pagePostReactions, page);
                PopulateNestedValues(pageVideoPosts, pageVideoPostsObj, page);
                PopulateNestedValues(pagePostImpressions, pagePostsImpressions, page);

                SqlUtility.BulkInsert(sqlConn, pageContentTable, schema + "." + "STAGING_PageContent");
                SqlUtility.BulkInsert(sqlConn, pageEngagementTable, schema + "." + "STAGING_PageEngagement");
                SqlUtility.BulkInsert(sqlConn, pageImpressionsTable, schema + "." + "STAGING_PageImpressions");
                SqlUtility.BulkInsert(sqlConn, pagePostsTable, schema + "." + "STAGING_PagePost");
                SqlUtility.BulkInsert(sqlConn, pagePostEngagement, schema + "." + "STAGING_PagePostEngagement");
                SqlUtility.BulkInsert(sqlConn, pagePostImpressions, schema + "." + "STAGING_PagePostImpressions");
                SqlUtility.BulkInsert(sqlConn, pagePostReactionsTable, schema + "." + "STAGING_PagePostReactions");
                SqlUtility.BulkInsert(sqlConn, pagePostStoriesAndPeopleTalkingAboutThisTable, schema + "." + "STAGING_PagePostStoriesAndPeopleTalkingAboutThis");
                SqlUtility.BulkInsert(sqlConn, pageReactionsTable, schema + "." + "STAGING_PageReactions");
                SqlUtility.BulkInsert(sqlConn, pageUserDemographicsTable, schema + "." + "STAGING_PageUserDemographics");
                SqlUtility.BulkInsert(sqlConn, pageVideoPosts, schema + "." + "STAGING_PageVideoPosts");
                SqlUtility.BulkInsert(sqlConn, pageVideoViews, schema + "." + "STAGING_PageVideoViews");
                SqlUtility.BulkInsert(sqlConn, pageViewsTable, schema + "." + "STAGING_PageViews");
                SqlUtility.BulkInsert(sqlConn, clicksTable, schema + "." + "STAGING_Clicks");
                SqlUtility.BulkInsert(sqlConn, postsInfoTable, schema + "." + "STAGING_PagePostsInfo");
                SqlUtility.BulkInsert(sqlConn, postsToTable, schema + "." + "STAGING_PagePostsTo");

            }
            catch (Exception e)
            {
                var errorDataTable = DataTableUtility.GetErrorDataTable();
                DataRow errorRow = errorDataTable.NewRow();
                errorRow["Date"] = getDataUntil == string.Empty ? DateTime.UtcNow.ToString("o") : getDataUntil;
                errorRow["Error"] = e.ToString();
                errorDataTable.Rows.Add(errorRow);
                SqlUtility.BulkInsert(sqlConn, errorDataTable, schema + "." + "Error");
                throw;
            }
            return true;
        }