private void LogFetching(string fetched, PackageRegistrationRange range)
 {
     if (range.MaxKey.HasValue)
     {
         _logger.LogInformation(
             "Fetching " + fetched + " with package registration key >= {MinKey} and <= {MaxKey} (~{Count} packages).",
             range.MinKey,
             range.MaxKey,
             range.PackageCount);
     }
     else
     {
         _logger.LogInformation("Fetching " + fetched + " with package registration key >= {MinKey} (~{Count} packages).",
                                range.MinKey,
                                range.PackageCount);
     }
 }
        private async Task <IReadOnlyList <Package> > GetPackagesAsync(PackageRegistrationRange range)
        {
            using (var context = await CreateContextAsync())
            {
                var minKey = range.MinKey;
                var query  = context
                             .Set <Package>()
                             .Include(x => x.PackageRegistration)
                             .Include(x => x.PackageTypes)
                             .Where(p => p.PackageStatusKey == PackageStatus.Available)
                             .Where(p => p.PackageRegistrationKey >= minKey);

                if (range.MaxKey.HasValue)
                {
                    var maxKey = range.MaxKey.Value;
                    query = query
                            .Where(p => p.PackageRegistrationKey <= maxKey);
                }

                LogFetching("packages", range);

                return(await query.ToListAsync());
            }
        }
        private async Task <IReadOnlyList <PackageRegistrationInfo> > GetPackageRegistrationInfoAsync(PackageRegistrationRange range)
        {
            using (var context = await CreateContextAsync())
            {
                var minKey = range.MinKey;
                var query  = context
                             .Set <PackageRegistration>()
                             .Include(x => x.Owners)
                             .Where(pr => pr.Key >= minKey);

                if (range.MaxKey.HasValue)
                {
                    var maxKey = range.MaxKey.Value;
                    query = query
                            .Where(pr => pr.Key <= maxKey);
                }

                LogFetching("owners", range);

                var packageRegistrations = await query.ToListAsync();

                return(packageRegistrations
                       .Where(pr => !ShouldSkipPackageRegistration(pr))
                       .Select(pr => new PackageRegistrationInfo(
                                   pr.Key,
                                   pr.Id,
                                   pr.Owners.Select(x => x.Username).ToArray(),
                                   pr.IsVerified))
                       .ToList());
            }
        }