refactor: relocate options classes to dedicated Options folders

Move configuration options from Core/DataAccess/DataSync/ExcelIO to
dedicated Options folders within each project for better organization.
Update all references and tests accordingly.
This commit is contained in:
Joseph Doherty
2026-01-03 08:55:08 -05:00
parent 3cb73eb09f
commit ec4c8fab87
52 changed files with 4628 additions and 202 deletions
@@ -0,0 +1,52 @@
namespace JdeScoping.DataAccess.Options;
/// <summary>
/// Configuration options for the data access layer.
/// </summary>
public class DataAccessOptions
{
/// <summary>
/// Configuration section name for binding.
/// </summary>
public const string SectionName = "DataAccess";
/// <summary>
/// Default timeout for database queries in seconds.
/// </summary>
public int DefaultTimeoutSeconds { get; set; } = 600;
/// <summary>
/// Timeout for lot usage queries in seconds (very large dataset).
/// </summary>
public int LotUsageTimeoutSeconds { get; set; } = 999999;
/// <summary>
/// Timeout for MIS data queries in seconds.
/// </summary>
public int MisDataTimeoutSeconds { get; set; } = 60000;
/// <summary>
/// Timeout for index rebuild operations in seconds.
/// </summary>
public int RebuildIndexTimeoutSeconds { get; set; } = 600;
/// <summary>
/// JDE production schema name (e.g., PRODDTA).
/// </summary>
public string ProductionSchema { get; set; } = "PRODDTA";
/// <summary>
/// JDE archive schema name (e.g., ARCDTAPD).
/// </summary>
public string ArchiveSchema { get; set; } = "ARCDTAPD";
/// <summary>
/// JDE stage schema name (e.g., JDESTAGE).
/// </summary>
public string StageSchema { get; set; } = "JDESTAGE";
/// <summary>
/// Enable detailed SQL logging for debugging.
/// </summary>
public bool EnableDetailedLogging { get; set; } = false;
}
@@ -0,0 +1,27 @@
namespace JdeScoping.DataAccess.Options;
/// <summary>
/// Configuration options for search operations.
/// </summary>
public class SearchOptions
{
/// <summary>
/// Configuration section name in appsettings.json.
/// </summary>
public const string SectionName = "Search";
/// <summary>
/// Maximum number of result rows to return.
/// </summary>
public int MaxResultRows { get; set; } = 100000;
/// <summary>
/// Search query timeout in seconds.
/// </summary>
public int TimeoutSeconds { get; set; } = 300;
/// <summary>
/// Maximum number of concurrent search operations.
/// </summary>
public int MaxConcurrentSearches { get; set; } = 5;
}
@@ -0,0 +1,32 @@
namespace JdeScoping.DataAccess.Options;
/// <summary>
/// Configuration options for search processing.
/// </summary>
public class SearchProcessingConfiguration
{
/// <summary>
/// Configuration section name in appsettings.json.
/// </summary>
public const string SectionName = "SearchProcessing";
/// <summary>
/// Query timeout in seconds for search execution.
/// </summary>
public int QueryTimeoutSeconds { get; set; } = 600;
/// <summary>
/// Maximum downstream traversal iterations.
/// </summary>
public int MaxTraversalIterations { get; set; } = 20;
/// <summary>
/// Enable debug SQL logging.
/// </summary>
public bool EnableDebugSql { get; set; } = false;
/// <summary>
/// Path to write debug SQL files (when EnableDebugSql is true).
/// </summary>
public string? DebugSqlPath { get; set; }
}
@@ -0,0 +1,27 @@
namespace JdeScoping.DataAccess.Options;
/// <summary>
/// Configuration options for search processing background service.
/// </summary>
public class SearchProcessingOptions
{
/// <summary>
/// Configuration section name in appsettings.json.
/// </summary>
public const string SectionName = "SearchProcessing";
/// <summary>
/// Interval in seconds between polling for new search requests.
/// </summary>
public int PollingIntervalSeconds { get; set; } = 5;
/// <summary>
/// Maximum number of concurrent search operations.
/// </summary>
public int MaxConcurrentSearches { get; set; } = 2;
/// <summary>
/// Search operation timeout in minutes.
/// </summary>
public int SearchTimeoutMinutes { get; set; } = 30;
}