🐛 Fix the webfeed
This commit is contained in:
@@ -1,5 +1,4 @@
|
|||||||
using DysonNetwork.Insight;
|
using DysonNetwork.Insight;
|
||||||
using DysonNetwork.Insight.Reader;
|
|
||||||
using DysonNetwork.Insight.Startup;
|
using DysonNetwork.Insight.Startup;
|
||||||
using DysonNetwork.Shared.Auth;
|
using DysonNetwork.Shared.Auth;
|
||||||
using DysonNetwork.Shared.Http;
|
using DysonNetwork.Shared.Http;
|
||||||
|
|||||||
@@ -119,7 +119,6 @@ public class WebFeedPublicController(
|
|||||||
var query = db.WebFeedSubscriptions
|
var query = db.WebFeedSubscriptions
|
||||||
.Where(s => s.AccountId == accountId)
|
.Where(s => s.AccountId == accountId)
|
||||||
.Include(s => s.Feed)
|
.Include(s => s.Feed)
|
||||||
.ThenInclude(f => f.Publisher)
|
|
||||||
.OrderByDescending(s => s.CreatedAt);
|
.OrderByDescending(s => s.CreatedAt);
|
||||||
|
|
||||||
var totalCount = await query.CountAsync();
|
var totalCount = await query.CountAsync();
|
||||||
@@ -155,7 +154,6 @@ public class WebFeedPublicController(
|
|||||||
|
|
||||||
var query = db.WebFeeds
|
var query = db.WebFeeds
|
||||||
.Where(f => subscribedFeedIds.Contains(f.Id))
|
.Where(f => subscribedFeedIds.Contains(f.Id))
|
||||||
.Include(f => f.Publisher)
|
|
||||||
.OrderByDescending(f => f.CreatedAt);
|
.OrderByDescending(f => f.CreatedAt);
|
||||||
|
|
||||||
var totalCount = await query.CountAsync();
|
var totalCount = await query.CountAsync();
|
||||||
@@ -207,8 +205,7 @@ public class WebFeedPublicController(
|
|||||||
var query = db.WebArticles
|
var query = db.WebArticles
|
||||||
.Where(a => a.FeedId == feedId)
|
.Where(a => a.FeedId == feedId)
|
||||||
.OrderByDescending(a => a.CreatedAt)
|
.OrderByDescending(a => a.CreatedAt)
|
||||||
.Include(a => a.Feed)
|
.Include(a => a.Feed);
|
||||||
.ThenInclude(f => f.Publisher);
|
|
||||||
|
|
||||||
var totalCount = await query.CountAsync();
|
var totalCount = await query.CountAsync();
|
||||||
var articles = await query
|
var articles = await query
|
||||||
@@ -237,7 +234,6 @@ public class WebFeedPublicController(
|
|||||||
var accountId = Guid.Parse(currentUser.Id);
|
var accountId = Guid.Parse(currentUser.Id);
|
||||||
|
|
||||||
var feedsQuery = db.WebFeeds
|
var feedsQuery = db.WebFeeds
|
||||||
.Include(f => f.Publisher)
|
|
||||||
.OrderByDescending(f => f.CreatedAt)
|
.OrderByDescending(f => f.CreatedAt)
|
||||||
.AsQueryable();
|
.AsQueryable();
|
||||||
|
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ using System.ServiceModel.Syndication;
|
|||||||
using System.Xml;
|
using System.Xml;
|
||||||
using DysonNetwork.Shared.Models;
|
using DysonNetwork.Shared.Models;
|
||||||
using DysonNetwork.Shared.Models.Embed;
|
using DysonNetwork.Shared.Models.Embed;
|
||||||
|
using DysonNetwork.Shared.Registry;
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
|
||||||
namespace DysonNetwork.Insight.Reader;
|
namespace DysonNetwork.Insight.Reader;
|
||||||
@@ -10,7 +11,8 @@ public class WebFeedService(
|
|||||||
AppDatabase database,
|
AppDatabase database,
|
||||||
IHttpClientFactory httpClientFactory,
|
IHttpClientFactory httpClientFactory,
|
||||||
ILogger<WebFeedService> logger,
|
ILogger<WebFeedService> logger,
|
||||||
WebReaderService readerService
|
WebReaderService readerService,
|
||||||
|
RemotePublisherService remotePublisherService
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
public async Task<SnWebFeed> CreateWebFeedAsync(SnPublisher publisher, WebFeedController.WebFeedRequest request)
|
public async Task<SnWebFeed> CreateWebFeedAsync(SnPublisher publisher, WebFeedController.WebFeedRequest request)
|
||||||
@@ -22,6 +24,7 @@ public class WebFeedService(
|
|||||||
Description = request.Description,
|
Description = request.Description,
|
||||||
Config = request.Config ?? new WebFeedConfig(),
|
Config = request.Config ?? new WebFeedConfig(),
|
||||||
PublisherId = publisher.Id,
|
PublisherId = publisher.Id,
|
||||||
|
Publisher = publisher
|
||||||
};
|
};
|
||||||
|
|
||||||
database.WebFeeds.Add(feed);
|
database.WebFeeds.Add(feed);
|
||||||
@@ -30,20 +33,41 @@ public class WebFeedService(
|
|||||||
return feed;
|
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)
|
public async Task<SnWebFeed?> GetFeedAsync(Guid id, Guid? publisherId = null)
|
||||||
{
|
{
|
||||||
var query = database.WebFeeds
|
var query = database.WebFeeds
|
||||||
.Include(a => a.Publisher)
|
|
||||||
.Where(a => a.Id == id)
|
.Where(a => a.Id == id)
|
||||||
.AsQueryable();
|
.AsQueryable();
|
||||||
if (publisherId.HasValue)
|
if (publisherId.HasValue)
|
||||||
query = query.Where(a => a.PublisherId == publisherId.Value);
|
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)
|
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)
|
public async Task<SnWebFeed> UpdateFeedAsync(SnWebFeed feed, WebFeedController.WebFeedRequest request)
|
||||||
@@ -60,6 +84,8 @@ public class WebFeedService(
|
|||||||
database.Update(feed);
|
database.Update(feed);
|
||||||
await database.SaveChangesAsync();
|
await database.SaveChangesAsync();
|
||||||
|
|
||||||
|
feed.Publisher = await LoadPublisherAsync(feed.PublisherId, CancellationToken.None) ?? new SnPublisher();
|
||||||
|
|
||||||
return feed;
|
return feed;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ using System.Text.Json.Serialization;
|
|||||||
using DysonNetwork.Insight.Reader;
|
using DysonNetwork.Insight.Reader;
|
||||||
using DysonNetwork.Insight.Thought;
|
using DysonNetwork.Insight.Thought;
|
||||||
using DysonNetwork.Shared.Cache;
|
using DysonNetwork.Shared.Cache;
|
||||||
|
using DysonNetwork.Shared.Proto;
|
||||||
using DysonNetwork.Shared.Registry;
|
using DysonNetwork.Shared.Registry;
|
||||||
using Microsoft.SemanticKernel;
|
using Microsoft.SemanticKernel;
|
||||||
using NodaTime;
|
using NodaTime;
|
||||||
@@ -67,8 +68,8 @@ public static class ServiceCollectionExtensions
|
|||||||
{
|
{
|
||||||
services.AddSingleton<ThoughtProvider>();
|
services.AddSingleton<ThoughtProvider>();
|
||||||
services.AddScoped<ThoughtService>();
|
services.AddScoped<ThoughtService>();
|
||||||
services.AddScoped<WebFeedService>();
|
services.AddScoped<Reader.WebFeedService>();
|
||||||
services.AddScoped<WebReaderService>();
|
services.AddScoped<Reader.WebReaderService>();
|
||||||
|
|
||||||
return services;
|
return services;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user