using System.Text.Json; using System.Text.Json.Serialization; namespace OI.Metrology.Server.Models; public record AppSettings(string ApiFileShare, string ApiLoggingContentTypes, string ApiLoggingPathPrefixes, string ApiLogPath, string ApiUrl, string BuildNumber, string Company, string ConnectionString, string EcCharacterizationSi, string EcMesaFileShareCharacterizationSi, string EcMesaFileShareMetrologySi, string EcMetrologySi, string GitCommitSeven, string InboundApiAllowedIPList, string IqsColumns, string[] IqsFileSegments, string IqsKey, string IqsRed, string IqsYellow, bool IsDevelopment, bool IsStaging, string MockRoot, string MonAResource, string MonASite, string OpenInsightApplicationProgrammingInterface, Dictionary TableToPath, string URLs, string WaferCounterDestinationDirectory, int WaferCounterTwoFileSecondsWait, string WorkingDirectoryName) { public override string ToString() { string result = JsonSerializer.Serialize(this, AppSettingsSourceGenerationContext.Default.AppSettings); return result; } private static void Verify(AppSettings appSettings) { if (string.IsNullOrEmpty(appSettings.Company)) throw new Exception("Company name must have a value!"); if (string.IsNullOrEmpty(appSettings.WorkingDirectoryName)) throw new Exception("Working directory name must have a value!"); } public static AppSettings Get(IConfigurationRoot configurationRoot) { AppSettings result; AppSettings? appSettings = configurationRoot.Get(); #pragma warning restore IL3050, IL2026 if (appSettings is null || appSettings?.Company is null) { List paths = []; foreach (IConfigurationProvider configurationProvider in configurationRoot.Providers) { if (configurationProvider is not Microsoft.Extensions.Configuration.Json.JsonConfigurationProvider jsonConfigurationProvider) continue; if (jsonConfigurationProvider.Source.FileProvider is not Microsoft.Extensions.FileProviders.PhysicalFileProvider physicalFileProvider) continue; paths.Add(physicalFileProvider.Root); } throw new NotSupportedException($"Not found!{Environment.NewLine}{string.Join(Environment.NewLine, paths.Distinct())}"); } result = new(appSettings.ApiFileShare, appSettings.ApiLoggingContentTypes, appSettings.ApiLoggingPathPrefixes, appSettings.ApiLogPath, appSettings.ApiUrl, appSettings.BuildNumber, appSettings.Company, appSettings.ConnectionString, appSettings.EcCharacterizationSi, appSettings.EcMesaFileShareCharacterizationSi, appSettings.EcMesaFileShareMetrologySi, appSettings.EcMetrologySi, appSettings.GitCommitSeven, appSettings.InboundApiAllowedIPList, appSettings.IqsColumns, appSettings.IqsFileSegments, appSettings.IqsKey, appSettings.IqsRed, appSettings.IqsYellow, appSettings.IsDevelopment, appSettings.IsStaging, appSettings.MockRoot, appSettings.MonAResource, appSettings.MonASite, appSettings.OpenInsightApplicationProgrammingInterface, appSettings.TableToPath, appSettings.URLs, appSettings.WaferCounterDestinationDirectory, appSettings.WaferCounterTwoFileSecondsWait, appSettings.WorkingDirectoryName); Verify(result); return result; } } [JsonSourceGenerationOptions(WriteIndented = true)] [JsonSerializable(typeof(AppSettings))] public partial class AppSettingsSourceGenerationContext : JsonSerializerContext { }