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