🐛 Fix the webfeed
This commit is contained in:
@@ -1,5 +1,4 @@
|
||||
using DysonNetwork.Insight;
|
||||
using DysonNetwork.Insight.Reader;
|
||||
using DysonNetwork.Insight.Startup;
|
||||
using DysonNetwork.Shared.Auth;
|
||||
using DysonNetwork.Shared.Http;
|
||||
|
||||
@@ -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();
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user