81b07ce027
- Create JdeScoping.DataSync.Dev for sandbox testing ETL code - Create JdeScoping.DataSync.Dev.Tests for associated tests - Move 22 source files and 8 test files - Update namespaces from DevEtl to Dev - Add both projects to solution
4.3 KiB
4.3 KiB
Design: Extract DevEtl to JdeScoping.DataSync.Dev
Date: 2026-01-06 Status: Approved
Purpose
Move dev/testing-specific ETL code from JdeScoping.DataSync into a separate JdeScoping.DataSync.Dev project. This code loads cached JSON/zstd files into SQL Server for local sandbox development and should not be part of the production DataSync assembly.
Scope
Files to Move (Source)
22 files from src/JdeScoping.DataSync/DevEtl/ → src/JdeScoping.DataSync.Dev/
DevEtlRegistry.csBranchDevEtl.csFunctionCodeDevEtl.csItemDevEtl.csJdeUserDevEtl.csLotDevEtl.csLotUsageCurrDevEtl.csLotUsageHistDevEtl.csMisDataDevEtl.csOrgHierarchyDevEtl.csProfitCenterDevEtl.csRouteMasterDevEtl.csWorkCenterDevEtl.csWorkOrderComponentCurrDevEtl.csWorkOrderComponentHistDevEtl.csWorkOrderCurrDevEtl.csWorkOrderHistDevEtl.csWorkOrderRoutingDevEtl.csWorkOrderStepCurrDevEtl.csWorkOrderStepHistDevEtl.csWorkOrderTimeCurrDevEtl.csWorkOrderTimeHistDevEtl.cs
Files to Move (Tests)
8 files from tests/JdeScoping.DataSync.Tests/DevEtl/ → tests/JdeScoping.DataSync.Dev.Tests/
BranchDevEtlTests.csFunctionCodeDevEtlTests.csItemDevEtlTests.csJdeUserDevEtlTests.csOrgHierarchyDevEtlTests.csProfitCenterDevEtlTests.csRouteMasterDevEtlTests.csWorkCenterDevEtlTests.cs
New Project Structure
NEW/
├── src/
│ └── JdeScoping.DataSync.Dev/
│ ├── JdeScoping.DataSync.Dev.csproj
│ ├── DevEtlRegistry.cs
│ ├── BranchDevEtl.cs
│ └── ... (20 more files)
└── tests/
└── JdeScoping.DataSync.Dev.Tests/
├── JdeScoping.DataSync.Dev.Tests.csproj
├── BranchDevEtlTests.cs
└── ... (7 more files)
Dependencies
JdeScoping.DataSync.Dev.csproj
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net10.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\JdeScoping.DataSync\JdeScoping.DataSync.csproj" />
</ItemGroup>
</Project>
Reuses ETL infrastructure from DataSync:
EtlPipeline,EtlPipelineBuilderJsonZstdFileSourceDbBulkImportDestinationJsonColumnSchema
JdeScoping.DataSync.Dev.Tests.csproj
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net10.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<IsPackable>false</IsPackable>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\..\src\JdeScoping.DataSync.Dev\JdeScoping.DataSync.Dev.csproj" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="..." />
<PackageReference Include="xunit" Version="..." />
<PackageReference Include="xunit.runner.visualstudio" Version="..." />
<PackageReference Include="Shouldly" Version="..." />
<PackageReference Include="NSubstitute" Version="..." />
</ItemGroup>
</Project>
Namespace Changes
All source files:
// Before
namespace JdeScoping.DataSync.DevEtl;
// After
namespace JdeScoping.DataSync.Dev;
All test files:
// Before
using JdeScoping.DataSync.DevEtl;
// After
using JdeScoping.DataSync.Dev;
Cleanup
After migration, delete:
src/JdeScoping.DataSync/DevEtl/(entire folder)tests/JdeScoping.DataSync.Tests/DevEtl/(entire folder)
Cache Files
No change to how cache files are located. The DevEtlRegistry continues to accept a cacheDirectory parameter at runtime.
Implementation Steps
- Create
src/JdeScoping.DataSync.Dev/JdeScoping.DataSync.Dev.csproj - Move 22 source files from
DevEtl/to new project - Update namespace in all source files
- Create
tests/JdeScoping.DataSync.Dev.Tests/JdeScoping.DataSync.Dev.Tests.csproj - Move 8 test files to new project
- Update using statements in test files
- Add both projects to solution
- Delete old
DevEtl/folders - Build and run tests to verify