refactor(webui): remove pipeline viewer feature

Remove the read-only pipeline viewer from the web UI:
- Delete PipelineViewer.razor page and supporting components
- Delete PipelineController and PipelineMapper from API
- Delete Pipeline DTOs from Core
- Delete PipelineApiClient from Client
- Remove navigation link and DI registrations
- Delete obsolete plan documents

The ConfigManager utility retains pipeline editing capabilities.
This commit is contained in:
Joseph Doherty
2026-01-21 10:14:43 -05:00
parent 94d5a864e0
commit ceb63bfefb
20 changed files with 329 additions and 2776 deletions
@@ -152,38 +152,4 @@ public static class ApiRoutes
$"api/refresh-status?minDT={minDt:yyyy-MM-dd}&maxDT={maxDt:yyyy-MM-dd}";
}
/// <summary>
/// Routes for pipeline configuration API endpoints.
/// </summary>
public static class Pipelines
{
/// <summary>Base route for pipeline endpoints.</summary>
public const string Base = "api/pipelines";
/// <summary>Route template for getting a pipeline by name.</summary>
public const string ByName = "{name}";
/// <summary>Route template for getting pipeline status.</summary>
public const string Status = "{name}/status";
/// <summary>Route template for getting pipeline executions.</summary>
public const string Executions = "{name}/executions";
/// <summary>Builds the route to get a specific pipeline config.</summary>
/// <param name="name">The pipeline name to URL-encode.</param>
/// <returns>The formatted route.</returns>
public static string GetByName(string name) => $"api/pipelines/{Uri.EscapeDataString(name)}";
/// <summary>Builds the route to get pipeline status.</summary>
/// <param name="name">The pipeline name to URL-encode.</param>
/// <returns>The formatted route.</returns>
public static string GetStatus(string name) => $"api/pipelines/{Uri.EscapeDataString(name)}/status";
/// <summary>Builds the route to get pipeline executions.</summary>
/// <param name="name">The pipeline name to URL-encode.</param>
/// <param name="count">The number of recent executions to retrieve.</param>
/// <returns>The formatted route.</returns>
public static string GetExecutions(string name, int count = 10) =>
$"api/pipelines/{Uri.EscapeDataString(name)}/executions?count={count}";
}
}
@@ -1,30 +0,0 @@
using JdeScoping.Core.Models.Pipelines;
using JdeScoping.Core.ApiContracts.Results;
namespace JdeScoping.Core.ApiContracts;
/// <summary>
/// Client contract for pipeline configuration API operations.
/// </summary>
public interface IPipelineApiClient
{
/// <summary>Gets list of all available pipeline names.</summary>
/// <param name="ct">Cancellation token.</param>
Task<ApiResult<PipelineListResponse>> GetPipelineNamesAsync(CancellationToken ct = default);
/// <summary>Gets configuration for a specific pipeline.</summary>
/// <param name="name">The pipeline name.</param>
/// <param name="ct">Cancellation token.</param>
Task<ApiResult<PipelineConfigDto>> GetPipelineAsync(string name, CancellationToken ct = default);
/// <summary>Gets schedule status for a pipeline.</summary>
/// <param name="name">The pipeline name.</param>
/// <param name="ct">Cancellation token.</param>
Task<ApiResult<PipelineStatusResponse>> GetStatusAsync(string name, CancellationToken ct = default);
/// <summary>Gets recent execution history for a pipeline.</summary>
/// <param name="name">The pipeline name.</param>
/// <param name="count">The maximum number of executions to return.</param>
/// <param name="ct">Cancellation token.</param>
Task<ApiResult<PipelineExecutionsResponse>> GetExecutionsAsync(string name, int count = 30, CancellationToken ct = default);
}
@@ -1,51 +0,0 @@
namespace JdeScoping.Core.Models.Pipelines;
/// <summary>
/// Pipeline configuration DTO for display.
/// </summary>
public record PipelineConfigDto(
string Name,
PipelineSourceDto Source,
PipelineDestinationDto Destination,
PipelineSchedulesDto Schedules,
int PreScriptCount,
int PostScriptCount,
List<string>? PreScripts,
List<string>? PostScripts);
public record PipelineSourceDto(
string Connection,
string? QueryPreview,
string? MassQueryPreview,
string? Query,
string? MassQuery,
List<PipelineParameterDto> Parameters);
public record PipelineParameterDto(
string Name,
string? Format,
string Source);
public record PipelineDestinationDto(
string Table,
string OperationType,
List<string>? MatchColumns,
List<string>? ExcludeFromUpdate);
public record PipelineSchedulesDto(
PipelineScheduleDto Mass,
PipelineScheduleDto Daily,
PipelineScheduleDto Hourly);
public record PipelineScheduleDto(
bool Enabled,
int IntervalMinutes,
bool PrePurge,
bool ReIndex,
bool IntervalIsOverride,
bool PrePurgeIsOverride,
bool ReIndexIsOverride,
string? Query,
List<PipelineParameterDto> Parameters,
List<string>? PreScripts,
List<string>? PostScripts);
@@ -1,16 +0,0 @@
namespace JdeScoping.Core.Models.Pipelines;
using JdeScoping.Core.Models.Enums;
/// <summary>
/// Pipeline execution history.
/// </summary>
public record PipelineExecutionsResponse(List<PipelineExecutionDto> Executions);
public record PipelineExecutionDto(
UpdateTypes ScheduleType,
DateTime StartTime,
DateTime? EndTime,
TimeSpan? Duration,
long RecordCount,
bool WasSuccessful);
@@ -1,6 +0,0 @@
namespace JdeScoping.Core.Models.Pipelines;
/// <summary>
/// Response containing list of available pipeline names.
/// </summary>
public record PipelineListResponse(List<string> PipelineNames);
@@ -1,17 +0,0 @@
namespace JdeScoping.Core.Models.Pipelines;
using JdeScoping.Core.Models.Enums;
/// <summary>
/// Pipeline schedule status for each update type.
/// </summary>
public record PipelineStatusResponse(List<PipelineScheduleStatusDto> Statuses);
public record PipelineScheduleStatusDto(
UpdateTypes ScheduleType,
DateTime? LastRun,
bool LastRunWasSuccessful,
DateTime? LastSuccessfulRun,
DateTime? NextRequiredRun,
bool IsOverdue,
int IntervalMinutes);