public IActionResult GetProviderFunding(string providerFundingFeedId) { ProviderFunding data = null; if (providerFundingFeedId.StartsWith("DSG_")) { data = GenerateDSGFunding.GenerateProviderFunding(providerFundingFeedId); } else if (providerFundingFeedId.StartsWith("PESports_")) { data = GeneratePESportsFunding.GenerateProviderFunding(providerFundingFeedId); } return(data == null?NotFound() : (IActionResult)Ok(data)); }
public IActionResult GetFeedById(string id) { var parts = id?.Split('_'); if (parts == null || parts.Length == 0) { return(NotFound()); } if (parts[0].Equals("DSG", StringComparison.InvariantCultureIgnoreCase)) { FeedBaseModel data = null; if (parts[0].Equals("DSG", StringComparison.InvariantCultureIgnoreCase)) { data = GenerateDSGFunding.GetFeedEntry(id); } else if (parts[0].Equals("PESports", StringComparison.InvariantCultureIgnoreCase)) { data = GeneratePESportsFunding.GetFeedEntry(id); } return(data == null?NotFound() : (IActionResult)Ok(data)); } else if (parts[0].Equals("PESports", StringComparison.InvariantCultureIgnoreCase)) { var data = GeneratePESportsFunding.GetFeedEntry(id); if (data == null) { return(NotFound()); } return(Ok(data)); } return(NotFound()); }
public IActionResult GetFeedPage([FromRoute] int?pageRef, int?pageSize = null, int?fundingPeriodStartYear = null, int?fundingPeriodEndYear = null, string[] fundingPeriodCodes = null, OrganisationIdentifier[] organisationGroupIdentifiers = null, OrganisationType[] organisationGroupTypes = null, OrganisationIdentifier[] organisationIdentifiers = null, OrganisationType[] organisationTypes = null, VariationReason[] variationReasons = null, string[] ukprns = null, GroupingReason[] groupingReasons = null, FundingStatus[] statuses = null, DateTime?minStatusChangeDate = null, string[] fundingStreamCodes = null, FundingLineType[] fundingLineTypes = null, string[] templateLineIds = null) { var schemeAndHost = "http://mock.web"; var fullList = new List <FeedResponseContentModel>(); var pageSizeT = pageSize ?? 10; if (fundingStreamCodes?.Any() != true || fundingStreamCodes.Contains("DSG")) { fullList.AddRange(GenerateDSGFunding.GenerateFeed(fundingPeriodStartYear, fundingPeriodEndYear, fundingPeriodCodes, organisationGroupIdentifiers, organisationGroupTypes, organisationIdentifiers, organisationTypes, variationReasons, ukprns, groupingReasons, statuses, minStatusChangeDate, fundingLineTypes, templateLineIds) ); } if (fundingStreamCodes?.Any() != true || fundingStreamCodes.Contains("PESports")) { fullList.AddRange(GeneratePESportsFunding.GenerateFeed(fundingPeriodStartYear, fundingPeriodEndYear, fundingPeriodCodes, organisationGroupIdentifiers, organisationGroupTypes, organisationIdentifiers, organisationTypes, variationReasons, ukprns, groupingReasons, statuses, minStatusChangeDate, fundingLineTypes, templateLineIds)); } fullList.Reverse(); var limitedList = fullList.Skip(((pageRef ?? 1) - 1) * pageSizeT).Take(pageSizeT).ToArray(); limitedList.Reverse(); // Reverse back var lastPageNumber = 1; var firstPageNumber = (int)Math.Ceiling(fullList.Count / (double)pageSizeT); var currentPageNumber = pageRef ?? firstPageNumber; var isFirstPage = firstPageNumber == currentPageNumber; var isLastPage = currentPageNumber == lastPageNumber; var qs = Request.QueryString.ToString(); var returnItem = new FeedResponseModel { Id = Guid.NewGuid().ToString(), Title = "MYESF / CFS shared funding model mock API", Author = new FeedResponseAuthor { Email = "*****@*****.**", Name = "Calculate Funding Service" }, Updated = DateTime.Now, Rights = "Copyright (C) 2019 Department for Education", Link = new List <FeedLink> { new FeedLink { Href = isFirstPage ? $"{schemeAndHost}/api/funding/feed" : $"{schemeAndHost}/api/funding/feed/{currentPageNumber}{qs}", Rel = "self" }, new FeedLink { Href = $"{schemeAndHost}/api/funding/feed/{firstPageNumber}{qs}", Rel = "first" }, new FeedLink { Href = $"{schemeAndHost}/api/funding/feed/{lastPageNumber}{qs}", Rel = "last" } }, AtomEntry = limitedList.ToArray() }; if (!isFirstPage) { returnItem.Link.Add(new FeedLink { Href = $"{schemeAndHost}/api/funding/feed/{currentPageNumber + 1}{qs}", Rel = "next" }); } if (!isLastPage) { returnItem.Link.Add(new FeedLink { Href = $"{schemeAndHost}/api/funding/feed/{currentPageNumber - 1}{qs}", Rel = "previous" }); } return(Ok(returnItem)); }
public HttpResponseMessage DownloadDSGFiles() { var takeAtOnce = 10; var processedFileNames = new List <string>(); byte[] fileBytes = null; ZipArchiveEntry zipItem; using (var memoryStream = new System.IO.MemoryStream()) { var feed = GenerateDSGFunding.GenerateFeed(null, null, null, null, null, null, null, null, null, null, null, null, null, null); using (var zip = new ZipArchive(memoryStream, ZipArchiveMode.Create, true)) { for (var idx = 0; idx <= (int)Math.Ceiling(feed.Length / 10.0); idx++) { var feedResponse = feed.Skip(idx * 10).Take(10).ToArray(); foreach (var feedEntry in feedResponse) { foreach (var providerFundingId in feedEntry.Content.Funding.ProviderFundings) { var fileName = $"{providerFundingId}.txt"; if (processedFileNames.Contains(fileName)) { continue; } var funding = GenerateDSGFunding.GenerateProviderFunding(providerFundingId); var fundingStr = JsonConvert.SerializeObject(funding); zipItem = zip.CreateEntry(fileName); processedFileNames.Add(fileName); using (var originalFileMemoryStream = new System.IO.MemoryStream(Encoding.ASCII.GetBytes(fundingStr))) { using (var entryStream = zipItem.Open()) { originalFileMemoryStream.CopyTo(entryStream); } } } } zipItem = zip.CreateEntry($"FeedResponse{(idx * takeAtOnce) + 1}-{(idx * takeAtOnce) + feedResponse.Length}.txt"); var feedResponseStr = JsonConvert.SerializeObject(feedResponse); using (var originalFileMemoryStream = new System.IO.MemoryStream(Encoding.ASCII.GetBytes(feedResponseStr))) { using (var entryStream = zipItem.Open()) { originalFileMemoryStream.CopyTo(entryStream); } } } } fileBytes = memoryStream.ToArray(); } var result = new HttpResponseMessage(HttpStatusCode.OK) { Content = new ByteArrayContent(fileBytes) }; result.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment") { FileName = "allDsg.zip" }; result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/zip"); return(result); }