using Microsoft.Extensions.Logging; using Microsoft.EntityFrameworkCore; using MotoresArgentinosV2.Core.DTOs; using MotoresArgentinosV2.Core.Interfaces; using MotoresArgentinosV2.Infrastructure.Data; using Microsoft.Data.SqlClient; namespace MotoresArgentinosV2.Infrastructure.Services; public class UsuariosLegacyService : IUsuariosLegacyService { private readonly EldiaDbContext _context; private readonly ILogger _logger; public UsuariosLegacyService(EldiaDbContext context, ILogger logger) { _context = context; _logger = logger; } public async Task ObtenerParticularPorUsuarioAsync(string nombreUsuario) { try { var paramUsuario = new SqlParameter("@usuario_nom", nombreUsuario); // Usamos SqlQueryRaw para mapear a DTO directamente (EF Core feature moderna) // Nota: Si las columnas no coinciden exactamente, EF no llenará las propiedades. // Para robustez en legacy, a veces conviene un mapeo manual si los nombres de columna son muy crípticos. var resultado = await _context.Database .SqlQueryRaw("EXEC dbo.sp_VerDatosUsuario @usuario_nom", paramUsuario) .ToListAsync(); return resultado.FirstOrDefault(); } catch (Exception ex) { _logger.LogError(ex, "Error al obtener datos de particular legacy para usuario: {Usuario}", nombreUsuario); throw; } } public async Task ObtenerAgenciaPorUsuarioAsync(string nombreUsuario) { try { var paramUsuario = new SqlParameter("@usuario_nom", nombreUsuario); var resultado = await _context.Database .SqlQueryRaw("EXEC dbo.sp_VerDatosAgencia @usuario_nom", paramUsuario) .ToListAsync(); return resultado.FirstOrDefault(); } catch (Exception ex) { _logger.LogError(ex, "Error al obtener datos de agencia legacy para usuario: {Usuario}", nombreUsuario); throw; } } }