Quantum.Data.Executor 1.0.5

dotnet add package Quantum.Data.Executor --version 1.0.5
                    
NuGet\Install-Package Quantum.Data.Executor -Version 1.0.5
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Quantum.Data.Executor" Version="1.0.5" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Quantum.Data.Executor" Version="1.0.5" />
                    
Directory.Packages.props
<PackageReference Include="Quantum.Data.Executor" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add Quantum.Data.Executor --version 1.0.5
                    
#r "nuget: Quantum.Data.Executor, 1.0.5"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package Quantum.Data.Executor@1.0.5
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=Quantum.Data.Executor&version=1.0.5
                    
Install as a Cake Addin
#tool nuget:?package=Quantum.Data.Executor&version=1.0.5
                    
Install as a Cake Tool

Quantum.Data.Executor

NuGet Version License: MIT

Quantum.Data.Executor es una librería de acceso a datos moderna, flexible y extensible para .NET. Actúa como el motor de ejecución para los scripts generados por Quantum.Data.SqlBuilder, proporcionando una interfaz unificada para interactuar con múltiples fuentes de datos, incluyendo SQL Server directo y servicios web ASMX heredados.

✨ Características Principales (v1.0.0)

  • Arquitectura de Factoría y Estrategia: Usa una interfaz IDataExecutor común y una factoría para crear el ejecutor correcto (SQL, Advance, CRM, CRMERP) en tiempo de ejecución.
  • Configuración Modular: Habilita y configura solo los ejecutores que tu aplicación necesita, manteniendo un bajo acoplamiento.
  • Compatibilidad con Inyección de Dependencias: Diseñada desde cero para integrarse perfectamente con el contenedor de servicios de ASP.NET Core.
  • Soporte para Múltiples Orígenes: Proporciona implementaciones listas para usar para SQL Server y servicios web ASMX.
  • Configuración Segura: Incluye mecanismos para descifrar claves y secretos desde appsettings.json en tiempo de ejecución.
  • Licenciamiento por Ensamblado: Contiene una capa de validación para asegurar que la librería se ejecute únicamente en aplicaciones autorizadas.

☢️ Nota Crítica de Seguridad: Ofuscación

Esta librería está diseñada para manejar secretos (como claves de API y de descifrado) y contiene lógica de validación de licencia. Debido a que el código .NET puede ser decompilado, es crítico y obligatorio ofuscar la DLL de Quantum.Data.Executor antes de distribuirla.

La ofuscación modifica el código compilado para hacerlo extremadamente difícil de entender para un ser humano, protegiendo así tus secretos y tu propiedad intelectual. Se recomienda usar herramientas como Obfuscar (código abierto) para proteger las clases internas de configuración y licenciamiento.


🚀 Instalación y Dependencias

Esta librería está diseñada para trabajar en conjunto con Quantum.Data.SqlBuilder.

dotnet add package Quantum.Data.Executor --version 1.0.0
dotnet add package Quantum.Data.SqlBuilder --version 1.0.0

💡 Configuración y Uso

El uso de la librería se centra en la configuración inicial a través de la inyección de dependencias en Program.cs.

1. Configuración en appsettings.json

{
  "ConnectionStrings": {
    "DefaultConnection": "Server=...;Database=...;"
  },
  "ExecutorSettings": {
    "ConfigSecretKey": "tu_clave_secreta_aqui", // Usar Secret Manager en desarrollo
    "LicenseKey": "el_nombre_cifrado_de_tu_app_aqui",
    "Advance": {
      "NodeKey": "valor_cifrado_de_la_nodekey"
    },
    "CRM": {
      "SecurityKey": "valor_cifrado_de_la_securitykey"
    },
    "Binding": { // Opcional: para personalizar timeouts
      "ReceiveTimeoutMinutes": 15
    }
  }
}

2. Configuración de Servicios en Program.cs

using Quantum.Data.Executor.Licensing;
using Quantum.Data.Executor.Configuration;
using Quantum.Data.Executor;
using Quantum.Data.SqlBuilder;

// --- INICIO DE LA CONFIGURACIÓN DE QUANTUM ---

// 1. Leer la clave secreta y crear el descifrador.
string configKey = builder.Configuration["ExecutorSettings:ConfigSecretKey"] 
    ?? throw new InvalidOperationException("La clave secreta 'ConfigSecretKey' no se encontró.");
var decryptor = new ConfigurationDecryptor(configKey);

// 2. Validar la licencia de la librería ANTES de continuar.
string licenseKey = builder.Configuration["ExecutorSettings:LicenseKey"];
QuantumLicenseValidator.Validate(licenseKey, decryptor);

var builder = WebApplication.CreateBuilder(args);

// 3. Crear y configurar la factoría de forma modular.
var executorFactory = new ExecutorFactory(decryptor);

// Cargar configuraciones (valores permanecen cifrados).
var advanceSettings = builder.Configuration.GetSection("ExecutorSettings:Advance").Get<AdvanceSettings>();
var crmSettings = builder.Configuration.GetSection("ExecutorSettings:CRM").Get<CrmSettings>();
var bindingSettings = builder.Configuration.GetSection("ExecutorSettings:Binding").Get<BindingSettings>();

// Habilitar los ejecutores que esta aplicación necesita.
executorFactory.AddDirectSqlSupport();
if (advanceSettings != null) executorFactory.AddAdvanceSupport(advanceSettings);
if (crmSettings != null) executorFactory.AddCrmSupport(crmSettings);
if (bindingSettings != null) executorFactory.ConfigureAsmxBindings(bindingSettings);


// 4. Registrar los servicios para la Inyección de Dependencias.
builder.Services.AddSingleton<IExecutorFactory>(executorFactory);
builder.Services.AddTransient<SqlBuilder>();

// --- FIN ---

3. Ejemplo de Uso en un Controlador

[ApiController]
[Route("api/[controller]")]
public class DataController : ControllerBase
{
    private readonly IExecutorFactory _factory;
    private readonly SqlBuilder _builder;

    public DataController(IExecutorFactory factory, SqlBuilder builder)
    {
        _factory = factory;
        _builder = builder;
    }

    // --- EJEMPLO: SQL DIRECTO ---
    [HttpGet("sql/products")]
    public async Task<IActionResult> GetProductsFromSql([FromServices] IConfiguration config)
    {
        var command = _builder.Select("*").From("Products").Build();
        var executor = _factory.CreateDirectSqlExecutor(config.GetConnectionString("DefaultConnection")!);
        DataSet result = await executor.GetDataSetAsync(command);
        return Ok(result.Tables[0]);
    }

    // --- EJEMPLO: ADVANCE (CON LOGIN) ---
    [HttpGet("advance/customers/{node}")]
    public async Task<IActionResult> GetCustomersFromAdvance(string node)
    {
        // La factoría se encarga de buscar la URL.
        var executor = await _factory.CreateAdvanceExecutorAsync(node);

        if (executor is not AdvanceAsmxExecutor advanceExecutor)
            return StatusCode(500, "El ejecutor no es de tipo Advance.");
        
        // La aplicación controla el flujo de login.
        bool loginOk = await advanceExecutor.LoginAsync("empresa_ejemplo", "usuario", "clave");
        if (!loginOk)
            return Unauthorized("Login en Advance falló.");

        var command = _builder.Select("Id, Nombre").From("Clientes").Build();
        DataSet result = await executor.GetDataSetAsync(command);
        return Ok(result.Tables[0]);
    }
}

📄 Licencia

Este proyecto está licenciado bajo la Licencia MIT. Ver el archivo LICENSE para más detalles.

Product Compatible and additional computed target framework versions.
.NET net9.0 is compatible.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 was computed.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
1.0.5 21 9/12/2025
1.0.4 61 9/12/2025
1.0.3 114 9/11/2025
1.0.2 112 9/11/2025
1.0.1 112 9/11/2025
1.0.0 113 9/11/2025

Versión 1.0.3: Metodo de extension para configuración.
 Versión 1.0.2: Refactorización interna para usar Quantum.Security.
 Versión 1.0.1: Excepcion personalizada.
 Versión 1.0.0: Lanzamiento inicial.