🐛 Fix the webfeed

This commit is contained in:
2026-01-14 01:18:34 +08:00
parent 0e1f13ae7d
commit 2401eed3ed
4 changed files with 34 additions and 12 deletions

View File

@@ -1,5 +1,4 @@
using DysonNetwork.Insight;
using DysonNetwork.Insight.Reader;
using DysonNetwork.Insight.Startup;
using DysonNetwork.Shared.Auth;
using DysonNetwork.Shared.Http;

View File

@@ -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();

View File

@@ -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<WebFeedService> logger,
WebReaderService readerService
WebReaderService readerService,
RemotePublisherService remotePublisherService
)
{
public async Task<SnWebFeed> 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<SnPublisher?> LoadPublisherAsync(Guid publisherId, CancellationToken cancellationToken)
{
try
{
return await remotePublisherService.GetPublisher(id: publisherId.ToString(), cancellationToken: cancellationToken);
}
catch (Grpc.Core.RpcException)
{
return null;
}
}
public async Task<SnWebFeed?> 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<List<SnWebFeed>> 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<SnWebFeed> 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;
}

View File

@@ -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<ThoughtProvider>();
services.AddScoped<ThoughtService>();
services.AddScoped<WebFeedService>();
services.AddScoped<WebReaderService>();
services.AddScoped<Reader.WebFeedService>();
services.AddScoped<Reader.WebReaderService>();
return services;
}