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); }
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); }
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); }