using Microsoft.Extensions.Configuration; using System.IO; namespace GanjooRazor { /// /// API Root /// public static class APIRoot { /// /// url /// public static string Url { get { if (!string.IsNullOrEmpty(_url)) return _url; IConfigurationRoot configuration = new ConfigurationBuilder() .SetBasePath(Directory.GetCurrentDirectory()).AddJsonFile("appsettings.json").AddEnvironmentVariables() // divan: honour env overrides (Docker) .Build(); _url = configuration["APIRoot"]; return _url; } } private static string _url = ""; private static string _InternetUrl = ""; /// /// internet accessible end point /// public static string InternetUrl { get { if (!string.IsNullOrEmpty(_InternetUrl)) return _InternetUrl; IConfigurationRoot configuration = new ConfigurationBuilder() .SetBasePath(Directory.GetCurrentDirectory()).AddJsonFile("appsettings.json").AddEnvironmentVariables() // divan: honour env overrides (Docker) .Build(); _InternetUrl = configuration["GlobalAPIRoot"]; return _InternetUrl; } } private static string _semanticSearchUrl = ""; /// /// Semantic search API endpoint — deliberately configurable separately from /// Url/InternetUrl. Currently points at a physically separate domain/app pool /// (ganjgah.ir) hosting the same RMuseum codebase, so that a problem with this one /// feature (a native ONNX Runtime crash, a performance issue, anything) can't affect /// api.ganjoor.net or the main site at all — proven necessary by an actual production /// incident, not a hypothetical precaution. Point this at the main API root instead once /// the feature has run stably on its own domain for a while. /// public static string SemanticSearchUrl { get { if (!string.IsNullOrEmpty(_semanticSearchUrl)) return _semanticSearchUrl; IConfigurationRoot configuration = new ConfigurationBuilder() .SetBasePath(Directory.GetCurrentDirectory()).AddJsonFile("appsettings.json").AddEnvironmentVariables() // divan: honour env overrides (Docker) .Build(); _semanticSearchUrl = configuration["SemanticSearchAPIRoot"]; return _semanticSearchUrl; } } } }