From a3fd46bb96ee740de5277b3977841ece6878f483 Mon Sep 17 00:00:00 2001 From: Laura Hausmann Date: Fri, 2 Feb 2024 20:19:56 +0100 Subject: [PATCH] [backend/masto-client] Include navigation properties for note queries --- .../Controllers/Mastodon/MastodonTimelineController.cs | 2 ++ Iceshrimp.Backend/Core/Helpers/QueryHelpers.cs | 9 +++++++++ 2 files changed, 11 insertions(+) diff --git a/Iceshrimp.Backend/Controllers/Mastodon/MastodonTimelineController.cs b/Iceshrimp.Backend/Controllers/Mastodon/MastodonTimelineController.cs index fd078f4d..2ec87716 100644 --- a/Iceshrimp.Backend/Controllers/Mastodon/MastodonTimelineController.cs +++ b/Iceshrimp.Backend/Controllers/Mastodon/MastodonTimelineController.cs @@ -27,6 +27,7 @@ public class MastodonTimelineController(DatabaseContext db, NoteRenderer noteRen public async Task GetHomeTimeline() { var user = HttpContext.GetOauthUser() ?? throw new GracefulException("Failed to get user from HttpContext"); var notes = await db.Notes + .WithIncludes() .IsFollowedBy(user) .OrderByIdDesc() .Take(40) @@ -41,6 +42,7 @@ public class MastodonTimelineController(DatabaseContext db, NoteRenderer noteRen [ProducesResponseType(StatusCodes.Status200OK, Type = typeof(IEnumerable))] public async Task GetPublicTimeline() { var notes = await db.Notes + .WithIncludes() .HasVisibility(Note.NoteVisibility.Public) .OrderByIdDesc() .Take(40) diff --git a/Iceshrimp.Backend/Core/Helpers/QueryHelpers.cs b/Iceshrimp.Backend/Core/Helpers/QueryHelpers.cs index bf58077b..0631ddb8 100644 --- a/Iceshrimp.Backend/Core/Helpers/QueryHelpers.cs +++ b/Iceshrimp.Backend/Core/Helpers/QueryHelpers.cs @@ -1,8 +1,17 @@ using Iceshrimp.Backend.Core.Database.Tables; +using Microsoft.EntityFrameworkCore; namespace Iceshrimp.Backend.Core.Helpers; public static class QueryHelpers { + public static IQueryable WithIncludes(this IQueryable query) { + return query.Include(p => p.User) + .Include(p => p.Renote) + .ThenInclude(p => p != null ? p.User : null) + .Include(p => p.Reply) + .ThenInclude(p => p != null ? p.User : null); + } + public static IQueryable HasVisibility(this IQueryable query, Note.NoteVisibility visibility) { return query.Where(note => note.Visibility == visibility); }