Initial commit: JDE Scoping Tool migration project
Set up repository with legacy .NET Framework 4.8 source (OLD/), new .NET 10 Blazor solution (NEW/), OpenSpec specifications, documentation, and project configuration.
This commit is contained in:
@@ -0,0 +1,106 @@
|
||||
using JdeScoping.Core.Models;
|
||||
using JdeScoping.Core.Models.Inventory;
|
||||
using JdeScoping.Core.Models.Organization;
|
||||
using JdeScoping.Core.Models.Quality;
|
||||
using JdeScoping.Core.Models.WorkOrders;
|
||||
using JdeScoping.DataSync;
|
||||
using JdeScoping.DataSync.Configuration;
|
||||
using JdeScoping.DataSync.Configuration.MergeConfigurations;
|
||||
using JdeScoping.DataSync.Contracts;
|
||||
using JdeScoping.DataSync.Fetchers.Cms;
|
||||
using JdeScoping.DataSync.Fetchers.Jde;
|
||||
using JdeScoping.DataSync.Generated;
|
||||
using JdeScoping.DataSync.HealthChecks;
|
||||
using JdeScoping.DataSync.Services;
|
||||
using JdeScoping.DataSync.Telemetry;
|
||||
using Microsoft.Extensions.Configuration;
|
||||
|
||||
namespace Microsoft.Extensions.DependencyInjection;
|
||||
|
||||
/// <summary>
|
||||
/// Extension methods for registering data sync services.
|
||||
/// </summary>
|
||||
public static class DataSyncDependencyInjection
|
||||
{
|
||||
/// <summary>
|
||||
/// Adds data synchronization services to the service collection.
|
||||
/// </summary>
|
||||
/// <param name="services">The service collection.</param>
|
||||
/// <param name="configuration">The configuration.</param>
|
||||
/// <returns>The service collection for chaining.</returns>
|
||||
public static IServiceCollection AddDataSyncServices(
|
||||
this IServiceCollection services,
|
||||
IConfiguration configuration)
|
||||
{
|
||||
// Bind configuration with validation
|
||||
services.AddOptions<DataSyncOptions>()
|
||||
.Bind(configuration.GetSection(DataSyncOptions.SectionName))
|
||||
.ValidateDataAnnotations()
|
||||
.ValidateOnStart();
|
||||
|
||||
// Register hosted service
|
||||
services.AddHostedService<DataSyncService>();
|
||||
|
||||
// Register core services as scoped (for parallel isolation)
|
||||
services.AddScoped<ISyncOrchestrator, SyncOrchestrator>();
|
||||
services.AddScoped<IScheduleChecker, ScheduleChecker>();
|
||||
services.AddScoped<ITableSyncOperation, TableSyncOperation>();
|
||||
services.AddScoped<IDataUpdateRepository, DataUpdateRepository>();
|
||||
|
||||
// Register bulk merge services
|
||||
services.AddSingleton<IDataReaderFactory, DataReaderFactory>();
|
||||
services.AddSingleton<ISchemaValidator, SchemaValidator>();
|
||||
services.AddScoped<IBulkMergeHelper, BulkMergeHelper>();
|
||||
|
||||
// Register merge configuration registry
|
||||
services.AddSingleton<IMergeConfigurationRegistry, MergeConfigurationRegistry>();
|
||||
|
||||
// Register merge configurations - explicit registration per entity
|
||||
services.AddSingleton<IMergeConfiguration<WorkOrder>, WorkOrderMergeConfiguration>();
|
||||
services.AddSingleton<IMergeConfiguration<Lot>, LotMergeConfiguration>();
|
||||
services.AddSingleton<IMergeConfiguration<LotUsage>, LotUsageMergeConfiguration>();
|
||||
services.AddSingleton<IMergeConfiguration<Item>, ItemMergeConfiguration>();
|
||||
services.AddSingleton<IMergeConfiguration<WorkCenter>, WorkCenterMergeConfiguration>();
|
||||
services.AddSingleton<IMergeConfiguration<ProfitCenter>, ProfitCenterMergeConfiguration>();
|
||||
services.AddSingleton<IMergeConfiguration<JdeUser>, JdeUserMergeConfiguration>();
|
||||
services.AddSingleton<IMergeConfiguration<Branch>, BranchMergeConfiguration>();
|
||||
services.AddSingleton<IMergeConfiguration<MisData>, MisDataMergeConfiguration>();
|
||||
|
||||
// Register health check
|
||||
services.AddHealthChecks()
|
||||
.AddCheck<DataSyncHealthCheck>("data-sync", tags: ["datasync", "background"]);
|
||||
|
||||
// Register metrics as singleton
|
||||
services.AddSingleton<DataSyncMetrics>();
|
||||
|
||||
// Register JDE fetchers
|
||||
services.AddScoped<IDataFetcher<WorkOrder>, JdeWorkOrderFetcher>();
|
||||
services.AddScoped<IDataFetcher<LotUsage>, JdeLotUsageFetcher>();
|
||||
services.AddScoped<IDataFetcher<Item>, JdeItemFetcher>();
|
||||
services.AddScoped<IDataFetcher<Lot>, JdeLotFetcher>();
|
||||
services.AddScoped<IDataFetcher<WorkCenter>, JdeWorkCenterFetcher>();
|
||||
services.AddScoped<IDataFetcher<ProfitCenter>, JdeProfitCenterFetcher>();
|
||||
services.AddScoped<IDataFetcher<JdeUser>, JdeUserFetcher>();
|
||||
services.AddScoped<IDataFetcher<Branch>, JdeBranchFetcher>();
|
||||
|
||||
// Register CMS fetchers
|
||||
services.AddScoped<IDataFetcher<MisData>, CmsMisDataFetcher>();
|
||||
|
||||
// Register post processors
|
||||
services.AddScoped<IPostProcessor, MisDataPostProcessor>();
|
||||
services.AddScoped<MisDataPostProcessor>();
|
||||
|
||||
// Register fetchers by name for dynamic resolution
|
||||
services.AddScoped<JdeWorkOrderFetcher>();
|
||||
services.AddScoped<JdeLotUsageFetcher>();
|
||||
services.AddScoped<JdeItemFetcher>();
|
||||
services.AddScoped<JdeLotFetcher>();
|
||||
services.AddScoped<JdeWorkCenterFetcher>();
|
||||
services.AddScoped<JdeProfitCenterFetcher>();
|
||||
services.AddScoped<JdeUserFetcher>();
|
||||
services.AddScoped<JdeBranchFetcher>();
|
||||
services.AddScoped<CmsMisDataFetcher>();
|
||||
|
||||
return services;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user