using System.Text.Json; using System.Text.Json.Serialization; namespace PlotLine.Services; public static class PublicRouteNames { public const string Home = "PublicHome"; public const string Pricing = "PublicPricing"; public const string Help = "PublicHelp"; public const string HelpCategory = "PublicHelpCategory"; public const string HelpArticle = "PublicHelpArticle"; public const string About = "PublicAbout"; public const string Contact = "PublicContact"; public const string Privacy = "PublicPrivacy"; public const string Terms = "PublicTerms"; } public static class PublicSeo { public const string DefaultBaseUrl = "https://plotdirector.com"; public static string BaseUrl(IConfiguration configuration) { var baseUrl = configuration["Site:PublicBaseUrl"]?.TrimEnd('/'); return string.IsNullOrWhiteSpace(baseUrl) ? DefaultBaseUrl : baseUrl; } public static string AbsoluteUrl(IConfiguration configuration, string path) => $"{BaseUrl(configuration)}{path}"; public static string JsonLd(object value) => JsonSerializer.Serialize(value, new JsonSerializerOptions { DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull }); public static string WebPageJsonLd( IConfiguration configuration, string schemaType, string name, string path, string? description = null) => JsonLd(new Dictionary { ["@context"] = "https://schema.org", ["@type"] = schemaType, ["name"] = name, ["url"] = AbsoluteUrl(configuration, path), ["description"] = description }); public static string BreadcrumbJsonLd(params (string Name, string Url)[] items) => JsonLd(new Dictionary { ["@context"] = "https://schema.org", ["@type"] = "BreadcrumbList", ["itemListElement"] = items.Select((item, index) => new Dictionary { ["@type"] = "ListItem", ["position"] = index + 1, ["name"] = item.Name, ["item"] = item.Url }) }); }