From 2401eed3eda14053dc16a1a54293a3f09149c2ba Mon Sep 17 00:00:00 2001 From: LittleSheep Date: Wed, 14 Jan 2026 01:18:34 +0800 Subject: [PATCH] :bug: Fix the webfeed --- DysonNetwork.Insight/Program.cs | 1 - .../Reader/WebFeedPublicController.cs | 6 +--- DysonNetwork.Insight/Reader/WebFeedService.cs | 34 ++++++++++++++++--- .../Startup/ServiceCollectionExtensions.cs | 5 +-- 4 files changed, 34 insertions(+), 12 deletions(-) diff --git a/DysonNetwork.Insight/Program.cs b/DysonNetwork.Insight/Program.cs index 9571fe59..96828005 100644 --- a/DysonNetwork.Insight/Program.cs +++ b/DysonNetwork.Insight/Program.cs @@ -1,5 +1,4 @@ using DysonNetwork.Insight; -using DysonNetwork.Insight.Reader; using DysonNetwork.Insight.Startup; using DysonNetwork.Shared.Auth; using DysonNetwork.Shared.Http; diff --git a/DysonNetwork.Insight/Reader/WebFeedPublicController.cs b/DysonNetwork.Insight/Reader/WebFeedPublicController.cs index b91ec0bd..a5b3ceea 100644 --- a/DysonNetwork.Insight/Reader/WebFeedPublicController.cs +++ b/DysonNetwork.Insight/Reader/WebFeedPublicController.cs @@ -119,7 +119,6 @@ public class WebFeedPublicController( var query = db.WebFeedSubscriptions .Where(s => s.AccountId == accountId) .Include(s => s.Feed) - .ThenInclude(f => f.Publisher) .OrderByDescending(s => s.CreatedAt); var totalCount = await query.CountAsync(); @@ -155,7 +154,6 @@ public class WebFeedPublicController( var query = db.WebFeeds .Where(f => subscribedFeedIds.Contains(f.Id)) - .Include(f => f.Publisher) .OrderByDescending(f => f.CreatedAt); var totalCount = await query.CountAsync(); @@ -207,8 +205,7 @@ public class WebFeedPublicController( var query = db.WebArticles .Where(a => a.FeedId == feedId) .OrderByDescending(a => a.CreatedAt) - .Include(a => a.Feed) - .ThenInclude(f => f.Publisher); + .Include(a => a.Feed); var totalCount = await query.CountAsync(); var articles = await query @@ -237,7 +234,6 @@ public class WebFeedPublicController( var accountId = Guid.Parse(currentUser.Id); var feedsQuery = db.WebFeeds - .Include(f => f.Publisher) .OrderByDescending(f => f.CreatedAt) .AsQueryable(); diff --git a/DysonNetwork.Insight/Reader/WebFeedService.cs b/DysonNetwork.Insight/Reader/WebFeedService.cs index ebdb1f37..2b3c6325 100644 --- a/DysonNetwork.Insight/Reader/WebFeedService.cs +++ b/DysonNetwork.Insight/Reader/WebFeedService.cs @@ -2,6 +2,7 @@ using System.ServiceModel.Syndication; using System.Xml; using DysonNetwork.Shared.Models; using DysonNetwork.Shared.Models.Embed; +using DysonNetwork.Shared.Registry; using Microsoft.EntityFrameworkCore; namespace DysonNetwork.Insight.Reader; @@ -10,7 +11,8 @@ public class WebFeedService( AppDatabase database, IHttpClientFactory httpClientFactory, ILogger logger, - WebReaderService readerService + WebReaderService readerService, + RemotePublisherService remotePublisherService ) { public async Task CreateWebFeedAsync(SnPublisher publisher, WebFeedController.WebFeedRequest request) @@ -22,6 +24,7 @@ public class WebFeedService( Description = request.Description, Config = request.Config ?? new WebFeedConfig(), PublisherId = publisher.Id, + Publisher = publisher }; database.WebFeeds.Add(feed); @@ -30,20 +33,41 @@ public class WebFeedService( return feed; } + private async Task LoadPublisherAsync(Guid publisherId, CancellationToken cancellationToken) + { + try + { + return await remotePublisherService.GetPublisher(id: publisherId.ToString(), cancellationToken: cancellationToken); + } + catch (Grpc.Core.RpcException) + { + return null; + } + } + public async Task GetFeedAsync(Guid id, Guid? publisherId = null) { var query = database.WebFeeds - .Include(a => a.Publisher) .Where(a => a.Id == id) .AsQueryable(); if (publisherId.HasValue) query = query.Where(a => a.PublisherId == publisherId.Value); - return await query.FirstOrDefaultAsync(); + var feed = await query.FirstOrDefaultAsync(); + if (feed != null) + { + feed.Publisher = await LoadPublisherAsync(feed.PublisherId, CancellationToken.None) ?? new SnPublisher(); + } + return feed; } public async Task> GetFeedsByPublisherAsync(Guid publisherId) { - return await database.WebFeeds.Where(a => a.PublisherId == publisherId).ToListAsync(); + var feeds = await database.WebFeeds.Where(a => a.PublisherId == publisherId).ToListAsync(); + foreach (var feed in feeds) + { + feed.Publisher = await LoadPublisherAsync(feed.PublisherId, CancellationToken.None) ?? new SnPublisher(); + } + return feeds; } public async Task UpdateFeedAsync(SnWebFeed feed, WebFeedController.WebFeedRequest request) @@ -60,6 +84,8 @@ public class WebFeedService( database.Update(feed); await database.SaveChangesAsync(); + feed.Publisher = await LoadPublisherAsync(feed.PublisherId, CancellationToken.None) ?? new SnPublisher(); + return feed; } diff --git a/DysonNetwork.Insight/Startup/ServiceCollectionExtensions.cs b/DysonNetwork.Insight/Startup/ServiceCollectionExtensions.cs index e113c546..db4e2784 100644 --- a/DysonNetwork.Insight/Startup/ServiceCollectionExtensions.cs +++ b/DysonNetwork.Insight/Startup/ServiceCollectionExtensions.cs @@ -3,6 +3,7 @@ using System.Text.Json.Serialization; using DysonNetwork.Insight.Reader; using DysonNetwork.Insight.Thought; using DysonNetwork.Shared.Cache; +using DysonNetwork.Shared.Proto; using DysonNetwork.Shared.Registry; using Microsoft.SemanticKernel; using NodaTime; @@ -67,8 +68,8 @@ public static class ServiceCollectionExtensions { services.AddSingleton(); services.AddScoped(); - services.AddScoped(); - services.AddScoped(); + services.AddScoped(); + services.AddScoped(); return services; }