diff --git a/NEW/src/Utils/JdeScoping.ConfigManager/Models/ConfigModel.cs b/NEW/src/Utils/JdeScoping.ConfigManager/Models/ConfigModel.cs new file mode 100644 index 0000000..7a19289 --- /dev/null +++ b/NEW/src/Utils/JdeScoping.ConfigManager/Models/ConfigModel.cs @@ -0,0 +1,75 @@ +using System.Text.Json.Serialization; + +namespace JdeScoping.ConfigManager.Models; + +/// +/// Root model for appsettings.json configuration. +/// +public class ConfigModel +{ + public DataSyncSection DataSync { get; set; } = new(); + public DataAccessSection DataAccess { get; set; } = new(); + public AuthSection Auth { get; set; } = new(); + public LdapSection Ldap { get; set; } = new(); + public SearchSection Search { get; set; } = new(); + public ExcelExportSection ExcelExport { get; set; } = new(); + public Dictionary ConnectionStrings { get; set; } = new(); +} + +public class DataSyncSection +{ + public TimeSpan CheckInterval { get; set; } = TimeSpan.FromMinutes(1); + public int MaxDegreeOfParallelism { get; set; } = 4; + public int BatchSize { get; set; } = 50000; + public int BulkCopyBatchSize { get; set; } = 5000; + public double LookbackMultiplier { get; set; } = 1.5; + public int PurgeRetentionDays { get; set; } = 90; + public int SyncTimeoutSeconds { get; set; } = 3600; + public bool Enabled { get; set; } = true; +} + +public class DataAccessSection +{ + public int DefaultTimeoutSeconds { get; set; } = 30; + public int LotUsageTimeoutSeconds { get; set; } = 120; + public int MisDataTimeoutSeconds { get; set; } = 300; + public string ProductionSchema { get; set; } = "prod"; + public string ArchiveSchema { get; set; } = "archive"; + public string StageSchema { get; set; } = "stage"; + public bool EnableDetailedLogging { get; set; } = false; +} + +public class AuthSection +{ + public string CookieName { get; set; } = ".JdeScoping.Auth"; + public int CookieExpirationMinutes { get; set; } = 480; +} + +public class LdapSection +{ + public string[] ServerUrls { get; set; } = []; + public string GroupDn { get; set; } = string.Empty; + public string SearchBase { get; set; } = string.Empty; + public int ConnectionTimeoutSeconds { get; set; } = 30; + public bool UseFakeAuth { get; set; } = false; + public string[] AdminBypassUsers { get; set; } = []; +} + +public class SearchSection +{ + public int MaxResultRows { get; set; } = 100000; + public int TimeoutSeconds { get; set; } = 300; + public int MaxConcurrentSearches { get; set; } = 5; +} + +public class ExcelExportSection +{ + public string CriteriaSheetPassword { get; set; } = string.Empty; + public string DataSheetPassword { get; set; } = string.Empty; + public int MaxRowsPerSheet { get; set; } = 1000000; + public string DefaultDateFormat { get; set; } = "yyyy-MM-dd HH:mm:ss"; + public bool DebugWriteToFile { get; set; } = false; + public string DebugOutputDirectory { get; set; } = string.Empty; + public string TimezoneId { get; set; } = "America/Chicago"; + public string TimezoneAbbreviation { get; set; } = "CT"; +} diff --git a/NEW/src/Utils/JdeScoping.ConfigManager/Models/PipelineModel.cs b/NEW/src/Utils/JdeScoping.ConfigManager/Models/PipelineModel.cs new file mode 100644 index 0000000..43a5401 --- /dev/null +++ b/NEW/src/Utils/JdeScoping.ConfigManager/Models/PipelineModel.cs @@ -0,0 +1,60 @@ +namespace JdeScoping.ConfigManager.Models; + +/// +/// Root model for pipelines.json configuration. +/// +public class PipelinesConfigModel +{ + public PipelineSettings Settings { get; set; } = new(); + public ScheduleDefaults ScheduleDefaults { get; set; } = new(); + public Dictionary Pipelines { get; set; } = new(); +} + +public class PipelineSettings +{ + public string Timezone { get; set; } = "UTC"; +} + +public class ScheduleDefaults +{ + public ScheduleModel Mass { get; set; } = new() { Enabled = true, IntervalMinutes = 10080, PrePurge = true, ReIndex = true }; + public ScheduleModel Daily { get; set; } = new() { Enabled = true, IntervalMinutes = 1440 }; + public ScheduleModel Hourly { get; set; } = new() { Enabled = true, IntervalMinutes = 60 }; +} + +public class PipelineModel +{ + public PipelineSource Source { get; set; } = new(); + public PipelineSchedules Schedules { get; set; } = new(); + public PipelineDestination Destination { get; set; } = new(); + public string[]? PostScripts { get; set; } +} + +public class PipelineSource +{ + public string Connection { get; set; } = string.Empty; + public string Query { get; set; } = string.Empty; + public string? MassQuery { get; set; } + public Dictionary Parameters { get; set; } = new(); +} + +public class ParameterDefinition +{ + public string Name { get; set; } = string.Empty; + public string? Format { get; set; } + public string? Source { get; set; } +} + +public class PipelineSchedules +{ + public ScheduleModel? Mass { get; set; } + public ScheduleModel? Daily { get; set; } + public ScheduleModel? Hourly { get; set; } +} + +public class PipelineDestination +{ + public string Table { get; set; } = string.Empty; + public string[] MatchColumns { get; set; } = []; + public string[] ExcludeFromUpdate { get; set; } = []; +} diff --git a/NEW/src/Utils/JdeScoping.ConfigManager/Models/ScheduleModel.cs b/NEW/src/Utils/JdeScoping.ConfigManager/Models/ScheduleModel.cs new file mode 100644 index 0000000..f36413d --- /dev/null +++ b/NEW/src/Utils/JdeScoping.ConfigManager/Models/ScheduleModel.cs @@ -0,0 +1,12 @@ +namespace JdeScoping.ConfigManager.Models; + +/// +/// Model for schedule configuration. +/// +public class ScheduleModel +{ + public bool Enabled { get; set; } = true; + public int IntervalMinutes { get; set; } = 60; + public bool PrePurge { get; set; } = false; + public bool ReIndex { get; set; } = false; +}