Ejemplo n.º 1
0
        public static List <CompanyNewsItem> GetCompanyNews(GetCompanyNewsRequest request)
        {
            var api = ExigoDAL.WebService();

            CompanyNewsResponse[] newsResponse;
            var newsItems = new List <CompanyNewsItem>();

            foreach (var department in request.NewsDepartments)
            {
                newsResponse = (api.GetCompanyNews(new Common.Api.ExigoWebService.GetCompanyNewsRequest
                {
                    DepartmentType = department
                }).CompanyNews);

                //Convert to our model
                newsItems = newsResponse.Select(apiItem => (CompanyNewsItem)apiItem)
                            .Where(newsItem => (NewsWebSettings)newsItem.WebSettings == NewsWebSettings.AccessAvailable).ToList(); //and filter out anything not flagged as available in the backoffice


                // If they requested the content, then loop through all the articles and add the content to each news item
                var tasks = new List <Task>();
                foreach (var item in newsItems)
                {
                    tasks.Add(Task.Factory.StartNew(() =>
                    {
                        var newsItemResponse = (api.GetCompanyNewsItem(new Common.Api.ExigoWebService.GetCompanyNewsItemRequest
                        {
                            NewsID = item.NewsID
                        }));

                        //Add the content to the item
                        item.Content = newsItemResponse.Content;
                    }));

                    Task.WaitAll(tasks.ToArray());
                    tasks.Clear();
                }
            }

            return(newsItems);
        }
Ejemplo n.º 2
0
        public static List <CompanyNewsItem> GetCompanyNews(GetCompanyNewsRequest request)
        {
            var results         = new List <CompanyNewsItem>();
            var exigoWebService = Exigo.WebService();

            // Ensure that we have the minimum requirements
            var hasRequestedDepartments = (request.NewsDepartments != null && request.NewsDepartments.Length > 0);
            var hasRequestedNewsItems   = (request.NewsItemIDs != null && request.NewsItemIDs.Length > 0);

            if (!hasRequestedDepartments && !hasRequestedNewsItems)
            {
                return(results);
            }


            // Get the news items based on the requested settings
            var tasks = new List <Task>();

            if (hasRequestedDepartments)
            {
                var apiItems = new List <CompanyNewsResponse>();

                foreach (var department in request.NewsDepartments)
                {
                    tasks.Add(Task.Factory.StartNew(() =>
                    {
                        apiItems.AddRange(exigoWebService.GetCompanyNews(new Common.Api.ExigoWebService.GetCompanyNewsRequest
                        {
                            DepartmentType = department,
                            StartDate      = request.StartDate,
                            EndDate        = request.EndDate
                        }).CompanyNews);
                    }));
                }

                Task.WaitAll(tasks.ToArray());
                tasks.Clear();

                // Convert the news items to our model
                results = apiItems.Select(apiItem => (CompanyNewsItem)apiItem).ToList();
            }
            else if (hasRequestedNewsItems)
            {
                var apiItems = new List <GetCompanyNewsItemResponse>();

                foreach (var newsItemID in request.NewsItemIDs)
                {
                    tasks.Add(Task.Factory.StartNew(() =>
                    {
                        apiItems.Add(exigoWebService.GetCompanyNewsItem(new GetCompanyNewsItemRequest()
                        {
                            NewsID = newsItemID
                        }));
                    }));
                }

                Task.WaitAll(tasks.ToArray());
                tasks.Clear();

                // Convert the news items to our model
                results = apiItems.Select(apiItem => (CompanyNewsItem)apiItem).ToList();
            }


            // Now that we have the results, order them and filter out the ones we don't need
            results = results.OrderByDescending(c => c.CreatedDate).ToList();
            if (hasRequestedDepartments && request.RowCount > 0)
            {
                results = results.Skip(request.Skip).Take(request.Take).ToList();
            }



            // Fetch the bodies of each news item if applicable
            if (hasRequestedDepartments && request.IncludeBody)
            {
                foreach (var result in results)
                {
                    tasks.Add(Task.Factory.StartNew(() =>
                    {
                        var apiItemDetail = exigoWebService.GetCompanyNewsItem(new GetCompanyNewsItemRequest()
                        {
                            NewsID = result.NewsItemID
                        });

                        result.Body = apiItemDetail.Description;
                    }));
                }

                Task.WaitAll(tasks.ToArray());
                tasks.Clear();
            }


            return(results);
        }
Ejemplo n.º 3
0
        public static List <CompanyNewsItem> GetCompanyNewsSQL(GetCompanyNewsRequest request)
        {
            var    NewsItems        = new List <CompanyNewsItem>();
            string takeSkipQuery    = string.Empty;
            string departmentsQuery = "WHERE cnd.DepartmentID IN @departments";

            // Ensure that we have the minimum requirements
            var hasRequestedDepartments = (request.NewsDepartments != null && request.NewsDepartments.Length > 0);
            var hasRequestedNewsItems   = (request.NewsItemIDs != null && request.NewsItemIDs.Length > 0);


            if (!hasRequestedDepartments || request.NewsDepartments.Any(n => n == 0))
            {
                departmentsQuery = "";
            }

            //if (!hasRequestedDepartments && !hasRequestedNewsItems)
            //{
            //    return NewsItems;
            //}

            if (hasRequestedDepartments && request.RowCount > 0)
            {
                //NewsItems = NewsItems.Skip(request.Skip).Take(request.Take).ToList();
                takeSkipQuery = string.Format("OFFSET {0} ROWS FETCH NEXT {1} ROWS ONLY", request.Skip, request.Take);
            }

            if (hasRequestedNewsItems)
            {
                using (var ctx = ExigoDAL.Sql())
                {
                    NewsItems = ctx.Query <CompanyNewsItem>(@"
                    SELECT 
	                      DISTINCT(cnd.NewsID) AS Department
	                    , cn.CompanyNewsID AS NewsID
	                    , cn.Title AS Description
	                    , cn.Content AS Content
	                    , cn.CreatedDate
                    FROM CompanyNewsDepartments cnd
                      INNER JOIN CompanyNews cn
                      ON cn.CompanyNewsID = cnd.NewsID
                      AND cn.AvailableOnWeb = 1
                    WHERE cn.CompanyNewsID IN @newsitems
                    ORDER BY cn.CreatedDate DESC
                    " + takeSkipQuery + @"
                ", new { newsitems = request.NewsItemIDs }).ToList();
                }
            }
            else
            {
                using (var ctx = ExigoDAL.Sql())
                {
                    NewsItems = ctx.Query <CompanyNewsItem>(@"
                    SELECT 
	                      DISTINCT(cnd.NewsID) AS Department
	                    , cn.CompanyNewsID AS NewsID
	                    , cn.Title AS Description
	                    , cn.Content AS Content
	                    , cn.CreatedDate
                    FROM CompanyNewsDepartments cnd
                      INNER JOIN CompanyNews cn
                      ON cn.CompanyNewsID = cnd.NewsID
                      AND cn.AvailableOnWeb = 1
                    " + departmentsQuery + @"
                    ORDER BY cn.CreatedDate DESC
                    " + takeSkipQuery + @"
                ", new { departments = request.NewsDepartments }).ToList();
                }
            }

            return(NewsItems);
        }