🐛 Fix sitemap and rss still respond all types of posts
This commit is contained in:
@@ -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");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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 =>
|
||||
nodes.AddRange(
|
||||
allPosts.Select(post =>
|
||||
{
|
||||
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
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user