public async Task <IActionResult> Sync( [FromServices] IConfiguration configuration, [FromServices] LegacyContext context, [FromServices] IOptions <ResponseOptions> responseOptions, CancellationToken cancellationToken = default) { var filtering = Request.ExtractFilteringRequest <AddressSyndicationFilter>(); var sorting = Request.ExtractSortingRequest(); var pagination = Request.ExtractPaginationRequest(); var pagedAddresses = new AddressSyndicationQuery( context, filtering.Filter?.ContainsEvent ?? false, filtering.Filter?.ContainsObject ?? false) .Fetch(filtering, sorting, pagination); Response.AddPagedQueryResultHeaders(pagedAddresses); return(new ContentResult { Content = await BuildAtomFeed(pagedAddresses, 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 <AddressSyndicationFilter>(); var sorting = Request.ExtractSortingRequest(); var pagination = Request.ExtractPaginationRequest(); var lastFeedUpdate = await context .AddressSyndication .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 pagedAddresses = new AddressSyndicationQuery( context, filtering.Filter?.Embed) .Fetch(filtering, sorting, pagination); return(new ContentResult { Content = await BuildAtomFeed(lastFeedUpdate, pagedAddresses, responseOptions, configuration), ContentType = MediaTypeNames.Text.Xml, StatusCode = StatusCodes.Status200OK }); }