🐛 Fix sitemap and rss still respond all types of posts

This commit is contained in:
2025-11-22 18:55:29 +08:00
parent 9b26a2a7eb
commit aeef16495f
2 changed files with 42 additions and 29 deletions

View File

@@ -9,7 +9,10 @@ using Microsoft.AspNetCore.Mvc;
namespace DysonNetwork.Zone.SEO;
[ApiController]
public class RssController(PostService.PostServiceClient postClient, MarkdownConverter markdownConverter) : ControllerBase
public class RssController(
PostService.PostServiceClient postClient,
MarkdownConverter markdownConverter
) : ControllerBase
{
[HttpGet("rss")]
[Produces("application/rss+xml")]
@@ -29,9 +32,11 @@ public class RssController(PostService.PostServiceClient postClient, MarkdownCon
{
OrderBy = "date",
OrderDesc = true,
PageSize = 20 // Get top 20 recent posts
PageSize = 20, // Get top 20 recent posts
};
request.Types_.Add(Shared.Proto.PostType.Article);
var response = await postClient.ListPostsAsync(request);
if (response?.Posts != null)
@@ -43,15 +48,18 @@ public class RssController(PostService.PostServiceClient postClient, MarkdownCon
var item = new SyndicationItem(
post.Title,
post.Content is not null ? markdownConverter.ToHtml(post.Content!) : "No content", // Convert Markdown to HTML
post.Content is not null
? markdownConverter.ToHtml(post.Content!)
: "No content", // Convert Markdown to HTML
new Uri(postUrl),
post.Id.ToString(),
post.EditedAt?.ToDateTimeOffset() ??
post.PublishedAt?.ToDateTimeOffset() ?? post.CreatedAt.ToDateTimeOffset()
post.EditedAt?.ToDateTimeOffset()
?? post.PublishedAt?.ToDateTimeOffset()
?? post.CreatedAt.ToDateTimeOffset()
)
{
PublishDate = post.PublishedAt?.ToDateTimeOffset() ??
post.CreatedAt.ToDateTimeOffset() // Use CreatedAt for publish date
PublishDate =
post.PublishedAt?.ToDateTimeOffset() ?? post.CreatedAt.ToDateTimeOffset(), // Use CreatedAt for publish date
};
items.Add(item);
@@ -61,7 +69,10 @@ public class RssController(PostService.PostServiceClient postClient, MarkdownCon
feed.Items = items;
await using var sw = new StringWriter();
await using var reader = XmlWriter.Create(sw, new XmlWriterSettings { Indent = true, Async = true });
await using var reader = XmlWriter.Create(
sw,
new XmlWriterSettings { Indent = true, Async = true }
);
var formatter = new Rss20FeedFormatter(feed);
formatter.WriteTo(reader);
@@ -70,3 +81,4 @@ public class RssController(PostService.PostServiceClient postClient, MarkdownCon
return Content(sw.ToString(), "application/rss+xml");
}
}

View File

@@ -7,10 +7,7 @@ using SimpleMvcSitemap;
namespace DysonNetwork.Zone.SEO;
[ApiController]
public class SitemapController(
AppDatabase db,
PostService.PostServiceClient postClient
)
public class SitemapController(AppDatabase db, PostService.PostServiceClient postClient)
: ControllerBase
{
[HttpGet("sitemap.xml")]
@@ -19,25 +16,26 @@ public class SitemapController(
var nodes = new List<SitemapNode>
{
// Add static pages
new("/")
{ ChangeFrequency = ChangeFrequency.Weekly, Priority = 1.0m },
new("/about")
{ ChangeFrequency = ChangeFrequency.Monthly, Priority = 0.8m },
new("/posts")
{ ChangeFrequency = ChangeFrequency.Daily, Priority = 0.9m }
new("/") { ChangeFrequency = ChangeFrequency.Weekly, Priority = 1.0m },
new("/about") { ChangeFrequency = ChangeFrequency.Monthly, Priority = 0.8m },
new("/posts") { ChangeFrequency = ChangeFrequency.Daily, Priority = 0.9m },
};
// Add dynamic posts
var allPosts = await GetAllPosts();
nodes.AddRange(allPosts.Select(post =>
{
var uri = post.AsUrl(Request.Host.ToString(), Request.Scheme);
return new SitemapNode(uri)
nodes.AddRange(
allPosts.Select(post =>
{
LastModificationDate = post.EditedAt?.ToDateTimeUtc() ?? post.CreatedAt.ToDateTimeUtc(),
ChangeFrequency = ChangeFrequency.Monthly, Priority = 0.7m
};
}));
var uri = post.AsUrl(Request.Host.ToString(), Request.Scheme);
return new SitemapNode(uri)
{
LastModificationDate =
post.EditedAt?.ToDateTimeUtc() ?? post.CreatedAt.ToDateTimeUtc(),
ChangeFrequency = ChangeFrequency.Monthly,
Priority = 0.7m,
};
})
);
return new SitemapProvider().CreateSitemap(new SitemapModel(nodes));
}
@@ -55,9 +53,11 @@ public class SitemapController(
OrderBy = "date",
OrderDesc = true,
PageSize = pageSize,
PageToken = pageToken ?? string.Empty
PageToken = pageToken ?? string.Empty,
};
request.Types_.Add(Shared.Proto.PostType.Article);
var response = await postClient.ListPostsAsync(request);
if (response?.Posts != null)
@@ -72,3 +72,4 @@ public class SitemapController(
return allPosts;
}
}