using Microsoft.Extensions.Configuration;
using MP.SPEC.Data;
using NLog;
using System.Text.Json;
namespace MP.SPEC.Services
{
///
/// Classe per chiamare metodi da MP-IO
///
/// rif: https://www.ezzylearning.net/tutorial/making-http-requests-in-blazor-server-apps https://wellsb.com/csharp/aspnet/blazor-httpclientfactory-and-web-api/
///
public class IOApiService
{
#region Public Constructors
public IOApiService(IHttpClientFactory clientFactory, IConfiguration configuration, ILogger logger)
{
_logger = logger;
_logger.LogInformation("Starting IOApiService INIT");
_configuration = configuration;
_clientFactory = clientFactory;
// conf url x chiamate REST
MpIoBaseUrl = _configuration.GetValue("ServerConf:MpIoBaseUrl");
}
#endregion Public Constructors
#region Public Methods
///
/// Chiama metodo x registrare esecuzione task da IOB
///
///
///
public async Task addTask2Exe(string idxMacc, string taskName, string taskVal)
{
// compongo URL e chiamo
string restUrl = $"IOB/addTask2Exe/{idxMacc}?taskName={taskName}&taskVal={taskVal}";
try
{
var response = await callMpIoUrlGet(restUrl);
}
catch (Exception exc)
{
Log.Error($"Errore durante chiamata addTask2Exe:{Environment.NewLine}{exc}");
}
}
///
/// Chiama metodo x chiedere sync DB
///
///
///
public async Task callSyncDb(string IdxMacc)
{
// chiamo aggiunta task SyncDb...
await addTask2Exe(IdxMacc, "syncDbData", "");
}
///
/// Effettua chiamata ad MP-IO
///
/// URL metodo relativo alla base path di MP-IO
///
public async Task callMpIoUrlGet(string relUrl)
{
string result = "";
var request = new HttpRequestMessage(HttpMethod.Get, $"{MpIoBaseUrl}{relUrl}");
request.Headers.Add("Accept", "application/vnd.github.v3+json");
var client = _clientFactory.CreateClient();
Log.Info($"Richiesta call per {MpIoBaseUrl}{relUrl}");
var response = await client.SendAsync(request);
if (response.IsSuccessStatusCode)
{
var stringResponse = await response.Content.ReadAsStringAsync();
result = stringResponse;
Log.Info($"Effettuata coin successo call per {MpIoBaseUrl}{relUrl}");
}
else
{
result = "NO";
Log.Error($"Errore in chaimata | code {response.StatusCode} | {response.Content}");
}
return result;
}
#endregion Public Methods
#region Private Fields
private static IConfiguration _configuration = null!;
private static ILogger _logger = null!;
private static Logger Log = LogManager.GetCurrentClassLogger();
private static string MpIoBaseUrl = "";
private readonly IHttpClientFactory _clientFactory;
#endregion Private Fields
}
}