feat: add UnderlyingChartDataService and DI registration
This commit is contained in:
@@ -35,6 +35,7 @@ builder.Services.AddHealthChecks()
|
|||||||
builder.Services.AddScoped<ICertificateDataService, CertificateDataService>();
|
builder.Services.AddScoped<ICertificateDataService, CertificateDataService>();
|
||||||
builder.Services.AddScoped<IChartDataService, ChartDataService>();
|
builder.Services.AddScoped<IChartDataService, ChartDataService>();
|
||||||
builder.Services.AddScoped<IChartDataServiceV2, ChartDataServiceV2>();
|
builder.Services.AddScoped<IChartDataServiceV2, ChartDataServiceV2>();
|
||||||
|
builder.Services.AddScoped<IUnderlyingChartDataService, UnderlyingChartDataService>();
|
||||||
builder.Services.AddScoped<IPdfSectionRenderer, AnagraficaSectionRenderer>();
|
builder.Services.AddScoped<IPdfSectionRenderer, AnagraficaSectionRenderer>();
|
||||||
builder.Services.AddScoped<IPdfSectionRenderer, EventiSectionRenderer>();
|
builder.Services.AddScoped<IPdfSectionRenderer, EventiSectionRenderer>();
|
||||||
builder.Services.AddScoped<IPdfSectionRenderer, ScenarioSectionRenderer>();
|
builder.Services.AddScoped<IPdfSectionRenderer, ScenarioSectionRenderer>();
|
||||||
|
|||||||
@@ -0,0 +1,72 @@
|
|||||||
|
using CertReports.Syncfusion.Models;
|
||||||
|
using Microsoft.Data.SqlClient;
|
||||||
|
using System.Data;
|
||||||
|
|
||||||
|
namespace CertReports.Syncfusion.Services.Implementations;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Recupera i dati per il grafico standalone di un singolo sottostante
|
||||||
|
/// (nessun contesto certificato). SP utilizzata: cedlab_Chart_UnderlyingOnly.
|
||||||
|
/// </summary>
|
||||||
|
public interface IUnderlyingChartDataService
|
||||||
|
{
|
||||||
|
Task<UnderlyingChartData?> GetChartDataAsync(int idUnderlyings);
|
||||||
|
}
|
||||||
|
|
||||||
|
public class UnderlyingChartDataService : IUnderlyingChartDataService
|
||||||
|
{
|
||||||
|
private readonly string _connectionString;
|
||||||
|
private readonly ILogger<UnderlyingChartDataService> _logger;
|
||||||
|
|
||||||
|
public UnderlyingChartDataService(IConfiguration config, ILogger<UnderlyingChartDataService> logger)
|
||||||
|
{
|
||||||
|
_connectionString = config.GetConnectionString("CertDb")
|
||||||
|
?? throw new InvalidOperationException("ConnectionString 'CertDb' non configurata.");
|
||||||
|
_logger = logger;
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<UnderlyingChartData?> GetChartDataAsync(int idUnderlyings)
|
||||||
|
{
|
||||||
|
await using var conn = new SqlConnection(_connectionString);
|
||||||
|
await conn.OpenAsync();
|
||||||
|
|
||||||
|
await using var cmd = new SqlCommand("cedlab_Chart_UnderlyingOnly", conn)
|
||||||
|
{ CommandType = CommandType.StoredProcedure };
|
||||||
|
cmd.Parameters.AddWithValue("@IDUnderlyings", idUnderlyings);
|
||||||
|
|
||||||
|
var result = new UnderlyingChartData { IDUnderlyings = idUnderlyings };
|
||||||
|
|
||||||
|
await using var r = await cmd.ExecuteReaderAsync();
|
||||||
|
while (await r.ReadAsync())
|
||||||
|
{
|
||||||
|
if (result.Points.Count == 0)
|
||||||
|
result.Nome = ToStr(r, "Nome");
|
||||||
|
|
||||||
|
result.Points.Add(new UnderlyingChartPoint
|
||||||
|
{
|
||||||
|
Date = r.GetDateTime(r.GetOrdinal("Px_date")),
|
||||||
|
Px = Convert.ToDecimal(r.GetValue(r.GetOrdinal("Px"))),
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
if (result.Points.Count == 0)
|
||||||
|
{
|
||||||
|
_logger.LogWarning(
|
||||||
|
"Nessun prezzo trovato per il sottostante {IDUnderlyings} (non trovato, cancellato, sospeso, o senza storico prezzi)",
|
||||||
|
idUnderlyings);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
_logger.LogInformation(
|
||||||
|
"Dati grafico sottostante caricati per {IDUnderlyings}: {Points} punti",
|
||||||
|
idUnderlyings, result.Points.Count);
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static string ToStr(SqlDataReader r, string column)
|
||||||
|
{
|
||||||
|
int ord = r.GetOrdinal(column);
|
||||||
|
return r.IsDBNull(ord) ? string.Empty : r.GetString(ord);
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user