public async Task <IActionResult> Sync( [FromServices] IConfiguration configuration, [FromServices] LegacyContext context, [FromServices] IOptions <ResponseOptions> responseOptions, CancellationToken cancellationToken = default) { var filtering = Request.ExtractFilteringRequest <ParcelSyndicationFilter>(); var sorting = Request.ExtractSortingRequest(); var pagination = Request.ExtractPaginationRequest(); var pagedParcels = new ParcelSyndicationQuery( context, filtering.Filter?.ContainsEvent ?? false, filtering.Filter?.ContainsObject ?? false) .Fetch(filtering, sorting, pagination); Response.AddPagedQueryResultHeaders(pagedParcels); return(new ContentResult { Content = await BuildAtomFeed(pagedParcels, responseOptions, configuration), ContentType = MediaTypeNames.Text.Xml, StatusCode = StatusCodes.Status200OK }); }
public async Task <IActionResult> Sync( [FromServices] IConfiguration configuration, [FromServices] LegacyContext context, [FromServices] IOptions <ResponseOptions> responseOptions, CancellationToken cancellationToken = default) { var filtering = Request.ExtractFilteringRequest <ParcelSyndicationFilter>(); var sorting = Request.ExtractSortingRequest(); var pagination = Request.ExtractPaginationRequest(); var lastFeedUpdate = await context .ParcelSyndication .AsNoTracking() .OrderByDescending(item => item.Position) .Select(item => item.SyndicationItemCreatedAt) .FirstOrDefaultAsync(cancellationToken); if (lastFeedUpdate == default) { lastFeedUpdate = new DateTimeOffset(2020, 1, 1, 0, 0, 0, TimeSpan.Zero); } var pagedParcels = new ParcelSyndicationQuery( context, filtering.Filter?.Embed) .Fetch(filtering, sorting, pagination); return(new ContentResult { Content = await BuildAtomFeed(lastFeedUpdate, pagedParcels, responseOptions, configuration), ContentType = MediaTypeNames.Text.Xml, StatusCode = StatusCodes.Status200OK }); }