private async Task <DocLibFolder> GetCurrentFolderAsync(Container doclibContainer)
        {
            var query   = new QueryDefinition("SELECT * FROM doclib dl where dl.IsFull = false");
            var folders = await CosmosQueryHelper.ExecuteQueryAsync <DocLibFolder>(query, doclibContainer);

            return(folders.FirstOrDefault());
        }
        private async Task MoveBlob(DocLibDocument doc, Container doclibContainer)
        {
            var query = new QueryDefinition("SELECT * FROM doclib dl WHERE dl.id = @id")
                        .WithParameter("@id", doc.Id);
            var unsortedEntry1 = await CosmosQueryHelper.ExecuteQueryAsync <DocLibDocument>(query, doclibContainer);

            var unsortedEntry = unsortedEntry1.First();

            if (unsortedEntry == null)
            {
                return;
            }
            await doclibContainer.DeleteItemAsync <DocLibDocument>(unsortedEntry.Id, new PartitionKey(unsortedEntry.Id));

            var newBlobLocation = $"{doc.FolderName}/{doc.RegisterName}/{doc.PhysicalName}";
            var source          = _bcc.GetBlobClient(doc.BlobLocation);

            if (await source.ExistsAsync())
            {
                var destBlob = _bcc.GetBlobClient(newBlobLocation);
                await destBlob.StartCopyFromUriAsync(source.Uri);
            }

            await source.DeleteAsync();

            doc.BlobLocation = newBlobLocation;
        }
        private async Task CreateCategoryAsync(DocLibDocument doc, Container doclibContainer)
        {
            var id     = $"Category.{doc.Category}";
            var query  = new QueryDefinition("SELECT * FROM doclib dl WHERE dl.id = @id").WithParameter("@id", id);
            var entity = (await CosmosQueryHelper.ExecuteQueryAsync <DocLibCategory>(query, doclibContainer)).SingleOrDefault();

            if (entity == null)
            {
                var cat = new DocLibCategory
                {
                    Id          = id,
                    Name        = doc.Category,
                    Description = ""
                };
                await doclibContainer.CreateItemAsync(cat);
            }
        }
 private async Task CreateTagsAsync(DocLibDocument doc, Container doclibContainer)
 {
     foreach (var docTag in doc.Tags)
     {
         var id     = $"Tag.{docTag}";
         var query  = new QueryDefinition("SELECT * FROM doclib dl WHERE dl.id = @id").WithParameter("@id", id);
         var entity = (await CosmosQueryHelper.ExecuteQueryAsync <DocLibTag>(query, doclibContainer)).SingleOrDefault();
         if (entity == null)
         {
             var lowercased = docTag.ToLower();
             var tag        = new DocLibTag
             {
                 Id   = id,
                 Name = lowercased,
             };
             await doclibContainer.CreateItemAsync(tag);
         }
     }
 }
Beispiel #5
0
        public async Task <IEnumerable <DocLibDocument> > ExecuteQueryAsync(DocumentQuery query)
        {
            var db        = _cosmosClient.GetDatabase(TableNames.Doclib);
            var container = db.GetContainer(TableNames.Doclib);

            var sb = new StringBuilder();

            sb.Append("SELECT * FROM doclib dl WHERE ");
            if (query.Unsorted)
            {
                sb.AppendLine("dl.unsorted = true ");
                return(await CosmosQueryHelper.ExecuteQueryAsync <DocLibDocument>(new QueryDefinition(sb.ToString()), container));
            }

            var andPredicates = new List <string>();

            if (!string.IsNullOrWhiteSpace(query.Category))
            {
                andPredicates.Add($"dl.category = '{query.Category}'");
            }
            if (!string.IsNullOrWhiteSpace(query.Description))
            {
                andPredicates.Add($"dl.description LIKE '%{query.Description}%'");
            }
            if (!string.IsNullOrWhiteSpace(query.Company))
            {
                andPredicates.Add($"dl.company = '{query.Company}'");
            }
            if (!string.IsNullOrWhiteSpace(query.DisplayName))
            {
                andPredicates.Add($"dl.displayName = '{query.DisplayName}'");
            }
            if (!string.IsNullOrWhiteSpace(query.PhysicalName))
            {
                andPredicates.Add($"dl.physicalName LIKE '%{query.PhysicalName}%'");
            }
            if (query.Tags?.Length > 0)
            {
                var tagQueries = new List <string>();
                foreach (var tag in query.Tags.Select(x => x.ToLower()))
                {
                    tagQueries.Add($"ARRAY_CONTAINS(dl.tags, '{tag}')");
                }
                andPredicates.Add($"({string.Join(" OR ", tagQueries).Trim()})");
            }
            if (query.UploadDateFrom != null)
            {
                var start = query.UploadDateFrom.Value.ToString("yyyy-MM-ddT00:00:00");
                var end   = query.UploadDateTo?.ToString("yyyy-MM-ddT00:00:00") ?? query.UploadDateFrom.Value.AddDays(1).ToString("yyyy-MM-ddT00:00:00");
                andPredicates.Add($"(dl.uploadDate BETWEEN '{start}' AND '{end}')");
            }
            if (query.DateOfDocumentFrom != null)
            {
                var start = query.DateOfDocumentFrom.Value.ToString("yyyy-MM-ddT00:00:00");
                var end   = query.DateOfDocumentTo?.ToString("yyyy-MM-ddT00:00:00") ?? query.DateOfDocumentFrom.Value.AddDays(1).ToString("yyyy-MM-ddT00:00:00");
                andPredicates.Add($"(dl.dateOfDocument BETWEEN '{start}' AND '{end}')");
            }

            var combined = string.Join(" AND ", andPredicates);

            sb.AppendLine(combined.Trim());
            return(await CosmosQueryHelper.ExecuteQueryAsync <DocLibDocument>(new QueryDefinition(sb.ToString()), container));
        }