Example #1
0
        public async Task ExecuteAsync(IDocumentClient client, DocumentCollection collection, Uri relativeCollectionUri)
        {
            EnsureArg.IsNotNull(client, nameof(client));
            EnsureArg.IsNotNull(collection, nameof(collection));
            EnsureArg.IsNotNull(relativeCollectionUri, nameof(relativeCollectionUri));

            // Detect if registry has been initialized
            var query = _queryFactory.Create <dynamic>(
                client,
                new CosmosQueryContext(
                    relativeCollectionUri,
                    new SqlQuerySpec($"SELECT TOP 1 * FROM c where c.{KnownDocumentProperties.PartitionKey} = '{SearchParameterStatusWrapper.SearchParameterStatusPartitionKey}'")));

            var results = await query.ExecuteNextAsync();

            if (!results.Any())
            {
                var statuses = await _filebasedRegistry.GetSearchParameterStatuses();

                foreach (SearchParameterStatusWrapper status in statuses.Select(x => x.ToSearchParameterStatusWrapper()))
                {
                    await client.UpsertDocumentAsync(relativeCollectionUri, status);
                }
            }
        }
Example #2
0
        public async Task <IReadOnlyCollection <ResourceSearchParameterStatus> > GetSearchParameterStatuses()
        {
            using var cancellationSource = new CancellationTokenSource(TimeSpan.FromMinutes(1));
            var parameterStatus = new List <ResourceSearchParameterStatus>();

            using IScoped <IDocumentClient> clientScope = _documentClientFactory.Invoke();

            do
            {
                var query = _queryFactory.Create <SearchParameterStatusWrapper>(
                    clientScope.Value,
                    new CosmosQueryContext(
                        CollectionUri,
                        new SqlQuerySpec("select * from c"),
                        new FeedOptions
                {
                    PartitionKey =
                        new PartitionKey(SearchParameterStatusWrapper.SearchParameterStatusPartitionKey),
                }));

                do
                {
                    FeedResponse <SearchParameterStatusWrapper> results = await query.ExecuteNextAsync <SearchParameterStatusWrapper>();

                    parameterStatus.AddRange(results.Select(x => x.ToSearchParameterStatus()));
                }while (query.HasMoreResults);

                if (!parameterStatus.Any())
                {
                    await Task.Delay(TimeSpan.FromSeconds(1), cancellationSource.Token);
                }
            }while (!parameterStatus.Any() && !cancellationSource.IsCancellationRequested);

            return(parameterStatus);
        }
Example #3
0
        public async Task <IReadOnlyCollection <ResourceSearchParameterStatus> > GetSearchParameterStatuses()
        {
            var parameterStatus = new List <ResourceSearchParameterStatus>();

            using var clientScope = _documentClientFactory.Invoke();

            var query = _queryFactory.Create <SearchParameterStatusWrapper>(
                clientScope.Value,
                new CosmosQueryContext(
                    CollectionUri,
                    new SqlQuerySpec("select * from c"),
                    new FeedOptions
            {
                PartitionKey =
                    new PartitionKey(SearchParameterStatusWrapper.SearchParameterStatusPartitionKey),
            }));

            do
            {
                FeedResponse <SearchParameterStatusWrapper> results = await query.ExecuteNextAsync <SearchParameterStatusWrapper>();

                parameterStatus.AddRange(results
                                         .Select(x => x.ToSearchParameterStatus()));
            }while (query.HasMoreResults);

            return(parameterStatus);
        }
Example #4
0
        internal IDocumentQuery <T> CreateDocumentQuery <T>(
            SqlQuerySpec sqlQuerySpec,
            FeedOptions feedOptions = null)
        {
            EnsureArg.IsNotNull(sqlQuerySpec, nameof(sqlQuerySpec));

            CosmosQueryContext context = new CosmosQueryContext(_collectionUri, sqlQuerySpec, feedOptions);

            return(_cosmosDocumentQueryFactory.Create <T>(_documentClient, context));
        }
Example #5
0
        public async Task GivenARegistryInitializer_WhenDatabaseIsNew_SearchParametersShouldBeUpserted()
        {
            IDocumentQuery <dynamic> documentQuery = Substitute.For <IDocumentQuery <dynamic> >();

            _cosmosDocumentQueryFactory.Create <dynamic>(Arg.Any <IDocumentClient>(), Arg.Any <CosmosQueryContext>())
            .Returns(documentQuery);

            documentQuery
            .ExecuteNextAsync()
            .Returns(new FeedResponse <dynamic>(new dynamic[0]));

            IDocumentClient documentClient        = Substitute.For <IDocumentClient>();
            var             relativeCollectionUri = new Uri("/collection1", UriKind.Relative);

            await _initializer.ExecuteAsync(documentClient, new DocumentCollection(), relativeCollectionUri);

            await documentClient.Received().UpsertDocumentAsync(
                relativeCollectionUri,
                Arg.Is <SearchParameterStatusWrapper>(x => x.Uri == _testParameterUri));
        }
Example #6
0
        internal async Task <FeedResponse <T> > ExecuteDocumentQueryAsync <T>(SqlQuerySpec sqlQuerySpec, FeedOptions feedOptions, CancellationToken cancellationToken)
        {
            EnsureArg.IsNotNull(sqlQuerySpec, nameof(sqlQuerySpec));

            var context = new CosmosQueryContext(CollectionUri, sqlQuerySpec, feedOptions);

            IDocumentQuery <T> documentQuery = _cosmosDocumentQueryFactory.Create <T>(_documentClientScope.Value, context);

            using (documentQuery)
            {
                return(await documentQuery.ExecuteNextAsync <T>(cancellationToken));
            }
        }