Exemplo n.º 1
0
        public async Task <CosmosDocumentResponse <TDocument, TEntity> > GetByIdAsync(string documentId, string partitionKey)
        {
            try
            {
                using var cosmosClient = new CosmosClient(CosmosDbConfiguration.Endpoint, CosmosDbConfiguration.AccessKey);

                var container = cosmosClient.GetContainer(CosmosDbConfiguration.DatabaseName, CosmosDbConfiguration.CollectionName);

                var documentResponse = await container.ReadItemAsync <TDocument>(partitionKey : new PartitionKey(partitionKey), id : documentId)
                                       .ConfigureAwait(false);

                var documentList = new List <TDocument> {
                    documentResponse.Resource
                };

                var cosmosDocumentResponse = new CosmosDocumentResponse <TDocument, TEntity>(documentResponse.StatusCode,
                                                                                             documentResponse.RequestCharge, documentList, _mapper);

                return(cosmosDocumentResponse);
            }
            catch (CosmosException)
            {
                return(new CosmosDocumentResponse <TDocument, TEntity>(HttpStatusCode.NotFound, 0, null, _mapper));
            }
        }
Exemplo n.º 2
0
        public async Task <CosmosDocumentResponse <TDocument, TEntity> > GetBySpecificationAsync(ExpressionSpecification <TDocument> documentSpecification,
                                                                                                 string partitionKey = "", int pageNumber = 1, int pageSize = 100)
        {
            var cosmosDocumentResponse = new CosmosDocumentResponse <TDocument, TEntity>();

            using var cosmosClient = new CosmosClient(CosmosDbConfiguration.Endpoint, CosmosDbConfiguration.AccessKey);

            var container = cosmosClient.GetContainer(CosmosDbConfiguration.DatabaseName, CosmosDbConfiguration.CollectionName);

            var queryRequestOptions = CosmosDbUtilities.SetQueryRequestOptions(partitionKey, pageSize);

            var documentQueryable = container.GetItemLinqQueryable <TDocument>(requestOptions: queryRequestOptions)
                                    .Where(documentSpecification.ToExpression()).Skip((pageNumber - 1) * pageSize).Take(pageSize);

            var documentIterator = documentQueryable.ToFeedIterator();

            while (documentIterator.HasMoreResults)
            {
                var documentFeedResponse = await documentIterator.ReadNextAsync().ConfigureAwait(false);

                cosmosDocumentResponse = new CosmosDocumentResponse <TDocument, TEntity>(documentFeedResponse.StatusCode,
                                                                                         documentFeedResponse.RequestCharge, documentFeedResponse.Resource.ToList(), _mapper);
            }

            return(cosmosDocumentResponse);
        }