public async Task <DocumentMetadata> SaveDocumentAsync(Document document) { // save the content if it doesn't already exist string documentHash = _hashAlgorithm.GetHash(document.Content); bool duplicate = await _blobContainer.ExistsAsync(documentHash); if (duplicate) { _eventSource.OnDuplicateFoundInDocumentStore(document.Id, documentHash); } else { // compress the document byte[] compressedContent = _compressor.Compress(document.Content); await _blobContainer.SetAsync(documentHash, compressedContent); } // save the metadata, in reverse chronological order string documentMetadataId = string.Format( CultureInfo.InvariantCulture, "{0}-{1}", DateTimeOffset.UtcNow.GetDescendingOrderString(), Guid.NewGuid()); var documentMetadata = new DocumentMetadata { Id = documentMetadataId, DocumentId = document.Id, Hash = documentHash, Duplicate = duplicate, Created = DateTimeOffset.UtcNow }; await _table.SetAsync(GetDocumentMetadataPartitionKey(document.Id), documentMetadataId, documentMetadata); return(documentMetadata); }