feat: add Sitemap and RSS feed validation service
TaxBaik CI/CD / build-and-deploy (push) Has been cancelled
TaxBaik CI/CD / build-and-deploy (push) Has been cancelled
New validation service for ensuring feed consistency: - SitemapValidationService: Complete feed validation • URL format validation (protocol, domain, scheme) • Duplicate URL detection • Blog post date validation • Sitemap ↔ RSS consistency checks - ValidationEndpoints (FastEndpoints): Admin API • GET /api/admin/validate/sitemap • GET /api/admin/validate/rss • GET /api/admin/validate/consistency Validation checks: ✓ URL validity (Uri.TryCreate) ✓ HTTPS protocol ✓ Correct domain ✓ GUID validity ✓ RFC 2822 date format ✓ Required fields ✓ Duplicate detection ✓ Post count consistency Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,73 @@
|
||||
using FastEndpoints;
|
||||
using TaxBaik.Web.Services;
|
||||
|
||||
namespace TaxBaik.Web.Endpoints.Admin;
|
||||
|
||||
/// <summary>
|
||||
/// Sitemap 및 RSS 검증 엔드포인트 (관리자 전용)
|
||||
/// </summary>
|
||||
public class ValidateSitemapEndpoint : EndpointWithoutRequest
|
||||
{
|
||||
private readonly SitemapValidationService _validationService;
|
||||
|
||||
public ValidateSitemapEndpoint(SitemapValidationService validationService)
|
||||
{
|
||||
_validationService = validationService;
|
||||
}
|
||||
|
||||
public override void Configure()
|
||||
{
|
||||
Get("/api/admin/validate/sitemap");
|
||||
Roles("admin");
|
||||
}
|
||||
|
||||
public override async Task HandleAsync(CancellationToken ct)
|
||||
{
|
||||
var result = await _validationService.ValidateSitemapAsync();
|
||||
await SendOkAsync(result, cancellation: ct);
|
||||
}
|
||||
}
|
||||
|
||||
public class ValidateRssEndpoint : EndpointWithoutRequest
|
||||
{
|
||||
private readonly SitemapValidationService _validationService;
|
||||
|
||||
public ValidateRssEndpoint(SitemapValidationService validationService)
|
||||
{
|
||||
_validationService = validationService;
|
||||
}
|
||||
|
||||
public override void Configure()
|
||||
{
|
||||
Get("/api/admin/validate/rss");
|
||||
Roles("admin");
|
||||
}
|
||||
|
||||
public override async Task HandleAsync(CancellationToken ct)
|
||||
{
|
||||
var result = await _validationService.ValidateRssFeedAsync();
|
||||
await SendOkAsync(result, cancellation: ct);
|
||||
}
|
||||
}
|
||||
|
||||
public class ValidateConsistencyEndpoint : EndpointWithoutRequest
|
||||
{
|
||||
private readonly SitemapValidationService _validationService;
|
||||
|
||||
public ValidateConsistencyEndpoint(SitemapValidationService validationService)
|
||||
{
|
||||
_validationService = validationService;
|
||||
}
|
||||
|
||||
public override void Configure()
|
||||
{
|
||||
Get("/api/admin/validate/consistency");
|
||||
Roles("admin");
|
||||
}
|
||||
|
||||
public override async Task HandleAsync(CancellationToken ct)
|
||||
{
|
||||
var result = await _validationService.ValidateConsistencyAsync();
|
||||
await SendOkAsync(result, cancellation: ct);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user