From 55a68b4315794fbde25f18b9157f09211b696816 Mon Sep 17 00:00:00 2001 From: Mia Winter Date: Sun, 4 Feb 2024 13:33:38 +0100 Subject: [PATCH] Improved query filter for articles, fixed access issues --- Wave/Components/Pages/ArticleEditor.razor | 2 ++ Wave/Components/Pages/ArticleView.razor | 2 ++ Wave/Components/Pages/Drafts.razor | 3 ++- Wave/Components/Pages/Future.razor | 3 ++- Wave/Components/Pages/Home.razor | 4 ---- Wave/Components/Pages/Review.razor | 3 ++- Wave/Data/ApplicationDbContext.cs | 2 +- 7 files changed, 11 insertions(+), 8 deletions(-) diff --git a/Wave/Components/Pages/ArticleEditor.razor b/Wave/Components/Pages/ArticleEditor.razor index 41a7b1f..136a208 100644 --- a/Wave/Components/Pages/ArticleEditor.razor +++ b/Wave/Components/Pages/ArticleEditor.razor @@ -233,6 +233,7 @@ await using var context = await ContextFactory.CreateDbContextAsync(); if (Id is not null) { Article = await context.Set
() + .IgnoreQueryFilters().Where(a => !a.IsDeleted) .Include(a => a.Author) .Include(a => a.Reviewer) .Include(a => a.Categories) @@ -279,6 +280,7 @@ Article article; if (Model.Id is not null) { article = await context.Set
() + .IgnoreQueryFilters().Where(a => !a.IsDeleted) .Include(a => a.Author) .Include(a => a.Reviewer) .Include(a => a.Categories) diff --git a/Wave/Components/Pages/ArticleView.razor b/Wave/Components/Pages/ArticleView.razor index 7bafa48..78e0ac6 100644 --- a/Wave/Components/Pages/ArticleView.razor +++ b/Wave/Components/Pages/ArticleView.razor @@ -143,6 +143,7 @@ if (Id is not null) { using var context = ContextFactory.CreateDbContext(); Article = context.Set
() + .IgnoreQueryFilters().Where(a => !a.IsDeleted) .Include(a => a.Author) .Include(a => a.Reviewer) .Include(a => a.Categories) @@ -150,6 +151,7 @@ } else if (Date is { } date && Title is { } title) { using var context = ContextFactory.CreateDbContext(); Article = context.Set
() + .IgnoreQueryFilters().Where(a => !a.IsDeleted) .Include(a => a.Author) .Include(a => a.Reviewer) .Include(a => a.Categories) diff --git a/Wave/Components/Pages/Drafts.razor b/Wave/Components/Pages/Drafts.razor index 6177a14..22d82ed 100644 --- a/Wave/Components/Pages/Drafts.razor +++ b/Wave/Components/Pages/Drafts.razor @@ -30,8 +30,9 @@ bool admin = HttpContext.User.IsInRole("Admin"); Articles.AddRange(await context.Set
() + .IgnoreQueryFilters() .Include(a => a.Author) - .Where(a => a.Status == ArticleStatus.Draft && (admin || a.Author.Id == userId)) + .Where(a => !a.IsDeleted && a.Status == ArticleStatus.Draft && (admin || a.Author.Id == userId)) .OrderByDescending(a => a.PublishDate) .ToListAsync()); } diff --git a/Wave/Components/Pages/Future.razor b/Wave/Components/Pages/Future.razor index e6576df..b650573 100644 --- a/Wave/Components/Pages/Future.razor +++ b/Wave/Components/Pages/Future.razor @@ -24,8 +24,9 @@ var now = DateTimeOffset.UtcNow; Articles.AddRange(await context.Set
() + .IgnoreQueryFilters() .Include(a => a.Author) - .Where(a => a.Status == ArticleStatus.Published && a.PublishDate > now) + .Where(a => !a.IsDeleted && a.Status == ArticleStatus.Published && a.PublishDate > now) .OrderByDescending(a => a.PublishDate) .ToListAsync()); } diff --git a/Wave/Components/Pages/Home.razor b/Wave/Components/Pages/Home.razor index bab3b7a..6bba5ad 100644 --- a/Wave/Components/Pages/Home.razor +++ b/Wave/Components/Pages/Home.razor @@ -79,10 +79,8 @@ try { await using var context = await ContextFactory.CreateDbContextAsync(); - var now = DateTimeOffset.UtcNow; var query = context.Set
() .Include(a => a.Author).Include(a => a.Categories) - .Where(a => a.Status >= ArticleStatus.Published && a.PublishDate <= now) .OrderByDescending(a => a.PublishDate); var articles = await query.Take(11).ToListAsync(); HasMore = (await query.CountAsync()) > 11; @@ -99,10 +97,8 @@ Busy = HasMore = true; await using var context = await ContextFactory.CreateDbContextAsync(); - var now = DateTimeOffset.UtcNow; var query = context.Set
() .Include(a => a.Author).Include(a => a.Categories) - .Where(a => a.Status >= ArticleStatus.Published && a.PublishDate <= now) .OrderByDescending(a => a.PublishDate) .Skip(Articles.Count); var articles = await query.Take(10).ToListAsync(); diff --git a/Wave/Components/Pages/Review.razor b/Wave/Components/Pages/Review.razor index 78176f5..4de1719 100644 --- a/Wave/Components/Pages/Review.razor +++ b/Wave/Components/Pages/Review.razor @@ -23,8 +23,9 @@ Articles.AddRange(await context.Set
() + .IgnoreQueryFilters() .Include(a => a.Author) - .Where(a => a.Status == ArticleStatus.InReview) + .Where(a => !a.IsDeleted && a.Status == ArticleStatus.InReview) .OrderByDescending(a => a.PublishDate) .ToListAsync()); } diff --git a/Wave/Data/ApplicationDbContext.cs b/Wave/Data/ApplicationDbContext.cs index 468fe5a..ae56269 100644 --- a/Wave/Data/ApplicationDbContext.cs +++ b/Wave/Data/ApplicationDbContext.cs @@ -52,7 +52,7 @@ public class ApplicationDbContext(DbContextOptions options .IsRequired().HasDefaultValueSql("now()") .HasConversion(dateTimeOffsetUtcConverter); - article.HasQueryFilter(a => !a.IsDeleted); + article.HasQueryFilter(a => !a.IsDeleted && a.Status >= ArticleStatus.Published && a.PublishDate <= DateTimeOffset.UtcNow); article.ToTable("Articles"); });