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)); } }
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); }