feat: implement ETL pipeline redesign and ConfigManager improvements

- Add pipeline registry with JSON-based configuration and hot-reload support
- Implement manual sync request feature with API, client UI, and database
- Improve ConfigManager: connection string dropdown in pipeline editor,
  step delete/reorder functionality, and fix JSON parsing for ConnectionStrings
This commit is contained in:
Joseph Doherty
2026-01-22 17:48:33 -05:00
parent 5a332232d0
commit 29ac56006d
82 changed files with 6257 additions and 296 deletions
@@ -0,0 +1,59 @@
namespace JdeScoping.Domain.Models;
/// <summary>
/// Represents a manually requested data sync operation.
/// </summary>
public class ManualSyncRequest
{
/// <summary>
/// Gets or sets the unique identifier.
/// </summary>
public int Id { get; set; }
/// <summary>
/// Gets or sets the name of the ETL pipeline to sync.
/// </summary>
public string PipelineName { get; set; } = string.Empty;
/// <summary>
/// Gets or sets the type of sync (mass, daily, hourly).
/// </summary>
public string SyncType { get; set; } = string.Empty;
/// <summary>
/// Gets or sets the UTC timestamp when the request was created.
/// </summary>
public DateTime RequestDT { get; set; }
/// <summary>
/// Gets or sets the username of the user who created the request.
/// </summary>
public string RequestedBy { get; set; } = string.Empty;
/// <summary>
/// Gets or sets the UTC timestamp when the sync completed, or null if pending.
/// </summary>
public DateTime? CompletedDT { get; set; }
/// <summary>
/// Gets or sets the UTC timestamp when the request was cancelled, or null if not cancelled.
/// </summary>
public DateTime? CancelDT { get; set; }
/// <summary>
/// Gets or sets the username of the user who cancelled the request, or null.
/// </summary>
public string? CancelledBy { get; set; }
/// <summary>
/// Gets or sets the row version for optimistic concurrency.
/// </summary>
public byte[] RowVersion { get; set; } = Array.Empty<byte>();
/// <summary>
/// Gets the derived status based on CompletedDT and CancelDT.
/// </summary>
public string Status => CancelDT.HasValue ? "Cancelled"
: CompletedDT.HasValue ? "Completed"
: "Pending";
}