using Microsoft.AspNetCore.Mvc; using System.Text; using System.Xml.Linq; using BCards.Web.Services; namespace BCards.Web.Controllers; public class SitemapController : Controller { private readonly IUserPageService _userPageService; private readonly ILivePageService _livePageService; private readonly ILogger _logger; public SitemapController( IUserPageService userPageService, ILivePageService livePageService, ILogger logger) { _userPageService = userPageService; _livePageService = livePageService; _logger = logger; } [Route("sitemap.xml")] [ResponseCache(Duration = 86400)] // Cache for 24 hours public async Task Index() { try { // 🔥 NOVA FUNCIONALIDADE: Usar LivePages em vez de UserPages var livePages = await _livePageService.GetAllActiveAsync(); var sitemap = new XDocument( new XDeclaration("1.0", "utf-8", "yes"), new XElement("urlset", new XAttribute("xmlns", "http://www.sitemaps.org/schemas/sitemap/0.9"), // Add static pages new XElement("url", new XElement("loc", $"{Request.Scheme}://{Request.Host}/"), new XElement("lastmod", DateTime.UtcNow.ToString("yyyy-MM-dd")), new XElement("changefreq", "daily"), new XElement("priority", "1.0") ), new XElement("url", new XElement("loc", $"{Request.Scheme}://{Request.Host}/Home/Pricing"), new XElement("lastmod", DateTime.UtcNow.ToString("yyyy-MM-dd")), new XElement("changefreq", "weekly"), new XElement("priority", "0.9") ), // Add live pages (SEO-optimized URLs only) livePages.Select(page => new XElement("url", new XElement("loc", $"{Request.Scheme}://{Request.Host}/page/{page.Category}/{page.Slug}"), new XElement("lastmod", page.LastSyncAt.ToString("yyyy-MM-dd")), new XElement("changefreq", "weekly"), new XElement("priority", "0.8") ) ) ) ); _logger.LogInformation($"Generated sitemap with {livePages.Count} live pages"); return Content(sitemap.ToString(), "application/xml", Encoding.UTF8); } catch (Exception ex) { _logger.LogError(ex, "Error generating sitemap"); return StatusCode(500, "Error generating sitemap"); } } [Route("robots.txt")] [ResponseCache(Duration = 86400)] // Cache for 24 hours public IActionResult RobotsTxt() { var robotsTxt = $@"User-agent: * Allow: / Allow: /page/ Disallow: /Admin/ Disallow: /Auth/ Disallow: /Payment/ Disallow: /api/ Sitemap: {Request.Scheme}://{Request.Host}/sitemap.xml"; return Content(robotsTxt, "text/plain", Encoding.UTF8); } }