using EntitlementBLL.Onboarding;
using Microsoft.AspNetCore.SignalR;
namespace EntitlementSL.Hubs;
///
/// Adapts IProvisioningHubContext (BLL) to the strongly-typed IHubContext<ProvisioningHub> —
/// mirrors FrameworkSL.Hubs.DataSync.DataSyncHubContext exactly. Registered Scoped in
/// Program.cs/EntitlementModule.cs so SignalR infrastructure is injected correctly.
///
public class ProvisioningHubContext : IProvisioningHubContext
{
private readonly IHubContext _hub;
public ProvisioningHubContext(IHubContext hub)
{
_hub = hub;
}
public async Task PushStageChangedAsync(int clientId, int provisioningJobId, string currentStep,
string[] completedSteps, CancellationToken ct)
{
await _hub.Clients.Group(ProvisioningHub.ClientGroup(clientId)).ReceiveStageChanged(
new ProvisioningStageEventDTO(clientId, provisioningJobId, currentStep, completedSteps, null))
.ConfigureAwait(false);
}
public async Task PushDdlProgressAsync(int clientId, int provisioningJobId, int swChangeRequestId,
int scriptsDone, int scriptsTotal, CancellationToken ct)
{
await _hub.Clients.Group(ProvisioningHub.ClientGroup(clientId)).ReceiveDdlProgress(
new ProvisioningDdlProgressDTO(clientId, provisioningJobId, swChangeRequestId, scriptsDone, scriptsTotal))
.ConfigureAwait(false);
}
public async Task PushCompletedAsync(int clientId, int provisioningJobId, string currentStep,
string[] completedSteps, CancellationToken ct)
{
await _hub.Clients.Group(ProvisioningHub.ClientGroup(clientId)).ReceiveCompleted(
new ProvisioningStageEventDTO(clientId, provisioningJobId, currentStep, completedSteps, null))
.ConfigureAwait(false);
}
public async Task PushFailedAsync(int clientId, int provisioningJobId, string errorMessage, CancellationToken ct)
{
await _hub.Clients.Group(ProvisioningHub.ClientGroup(clientId)).ReceiveFailed(
new ProvisioningStageEventDTO(clientId, provisioningJobId, string.Empty, Array.Empty(), errorMessage))
.ConfigureAwait(false);
}
}