예제 #1
0
        public async Task AddQueryAsync(string queryName, string cursorName)
        {
            using (var entityContext = new EntityContext())
            {
                var query = await GetQueryAsync(queryName, entityContext);

                if (query == null)
                {
                    var cursorService = new CursorService();
                    await cursorService.EnsureExistsAsync(cursorName);

                    var cursor = await cursorService.GetAsync(cursorName);

                    query = new PackageQueryEntity
                    {
                        Name      = queryName,
                        CursorKey = cursor.CursorKey,
                    };

                    entityContext.PackageQueries.Add(query);

                    await entityContext.SaveChangesAsync();
                }
                else if (query.Cursor.Name != cursorName)
                {
                    throw new ArgumentException($"The query {queryName} is not using cursor {cursorName}.");
                }
            }
        }
예제 #2
0
        private static async Task <List <PackageQueryMatchEntity> > GetExistingMatchesAsync(EntityContext entityContext, PackageQueryEntity query, IReadOnlyList <PackageIdentity> identities)
        {
            var identityStrings = new HashSet <string>(identities.Select(x => x.Value));

            var queryKey = query.PackageQueryKey;

            var existingIdentities = await entityContext
                                     .PackageQueryMatches
                                     .Include(x => x.Package)
                                     .Include(x => x.Package.PackageRegistration)
                                     .Where(x => identityStrings.Contains(x.Package.Identity) && x.PackageQueryKey == queryKey)
                                     .ToListAsync();

            return(existingIdentities);
        }