using System.Text.Json; using GB5Shared.DTO.Framework.Login; using Microsoft.Extensions.Logging; namespace EntitlementBLL.Onboarding; public class ReferenceDataSyncClient : IReferenceDataSyncClient { private readonly IHttpClientFactory _HttpClientFactory; private readonly ILogger _Logger; public ReferenceDataSyncClient(IHttpClientFactory httpClientFactory, ILogger logger) { _HttpClientFactory = httpClientFactory; _Logger = logger; } public async Task TriggerSyncJobAsync(int syncJobId, LoginDTO login, CancellationToken ct) { var client = _HttpClientFactory.CreateClient("FrameworkDataSync"); // Unlike SqlWorkbenchClient, no remapping here — TDSYNCJOB/DBINSTANCE/DBOBJECT/ // MDATASET all live in Entitlement's own EntitlementDb (confirmed live: the same // database USCIMPSYS is mapped to), so the caller's own LoginDTO is forwarded as-is. client.DefaultRequestHeaders.Remove("Login"); client.DefaultRequestHeaders.Add("Login", JsonSerializer.Serialize(login)); var response = await client.PostAsync($"/DataSync/TriggerSyncJob?SyncJobId={syncJobId}", null, ct) .ConfigureAwait(false); var raw = await response.Content.ReadAsStringAsync(ct).ConfigureAwait(false); if (!response.IsSuccessStatusCode) { _Logger.LogError("TriggerSyncJob({SyncJobId}) returned {StatusCode}: {Body}", syncJobId, response.StatusCode, raw); throw new InvalidOperationException($"TriggerSyncJob({syncJobId}) failed ({(int)response.StatusCode}): {raw}"); } _Logger.LogInformation("TriggerSyncJob({SyncJobId}) succeeded: {Body}", syncJobId, raw); } }