Nosabit.Core
1.2.3
dotnet add package Nosabit.Core --version 1.2.3
NuGet\Install-Package Nosabit.Core -Version 1.2.3
<PackageReference Include="Nosabit.Core" Version="1.2.3" />
<PackageVersion Include="Nosabit.Core" Version="1.2.3" />
<PackageReference Include="Nosabit.Core" />
paket add Nosabit.Core --version 1.2.3
#r "nuget: Nosabit.Core, 1.2.3"
#addin nuget:?package=Nosabit.Core&version=1.2.3
#tool nuget:?package=Nosabit.Core&version=1.2.3
Nosabit.Core
Una biblioteca de utilidades completa para aplicaciones .NET que simplifica tareas comunes de desarrollo. Incluye herramientas para manipulación de fechas, comparación de datos, seguridad, generación de contraseñas, conversión de tipos, manejo de HTTP, integración con React, procesamiento de formularios, y mucho más.
Instalación
Package Manager
Install-Package Nosabit.Core
.NET CLI
dotnet add package Nosabit.Core
PackageReference
<PackageReference Include="Nosabit.Core" Version="1.2.1" />
Contenido
Esta biblioteca se divide en varias categorías de utilidades:
- Manipulación de fechas: Conversión y formateo de fechas entre diferentes formatos (ES, EN, DB)
- Comparación de datos: Utilidades para comparación flexible de diferentes tipos de datos
- Seguridad: Encriptación y protección de datos sensibles
- Generación de contraseñas: Creación de contraseñas seguras
- Conversión y procesamiento: Transformaciones de datos y manejo de valores nulos
- Extensiones HTTP y JSON: Manejo de datos web y serialización/deserialización
- Componentes para UI: Integración con React Tables, Select y otros componentes
- DTOs y modelos: Objetos de transferencia predefinidos para distintos escenarios
Ejemplos de uso
DateTimeParse - Formateo y conversión de fechas
// Convertir DateTime a string en formato español (dd/MM/yyyy)
DateTime fecha = DateTime.Now;
string fechaES = fecha.AsDateEs();
// Resultado: "21/03/2025"
// Convertir DateTime a string en formato inglés (MM/dd/yyyy)
string fechaEN = fecha.AsDateEN();
// Resultado: "03/21/2025"
// Convertir DateTime a string en formato para base de datos (yyyy-MM-dd)
string fechaDB = fecha.AsDateDB();
// Resultado: "2025-03-21"
// Convertir string a DateTime desde formato español
string textoFecha = "21/03/2025";
DateTime? fechaDesdeString = textoFecha.ToDateEs();
// Trabajar con zonas horarias
DateTime fechaUTC = DateTime.UtcNow;
DateTime fechaCR = fechaUTC.GetTimeZoneCR(); // Convertir a hora de Costa Rica
CompareRequest - Utilidades de comparación
// Comparar cadenas con búsqueda insensible a mayúsculas/minúsculas
bool contiene = CompareRequest.CompareSearch("Hola Mundo", "mundo");
// Resultado: true
// Comparar igualdad exacta (insensible a mayúsculas/minúsculas)
bool esIgual = CompareRequest.CompareEqualsSearch("Hola", "hola");
// Resultado: true
// Comparar un valor booleano con una cadena de búsqueda
bool comparaBool = CompareRequest.CompareSearch(true, "activo", "Activo", "Inactivo");
// Compara si el texto correspondiente al valor booleano contiene el término de búsqueda
// Comparar valores numéricos
bool comparaNumero = CompareRequest.CompareSearch(12345, "123");
// Resultado: true
SecurityEncrytor - Encriptación y seguridad
// Encriptar texto con AES
string textoSensible = "contraseña123";
string textoEncriptado = textoSensible.ToEncriptarAES();
// Encriptar texto con Base64
string textoSimple = "texto secreto";
string base64 = textoSimple.ToEncriptar();
// Desencriptar texto Base64
string original = base64.ToDesEncriptar();
// Resultado: "texto secreto"
CreatePassword - Generación de contraseñas
// Generar una contraseña aleatoria segura
string nuevaContraseña = CreatePassword.Generate();
// Resultado: algo como "aB3x7Z" (incluye minúsculas, mayúsculas y números)
ToIsNull - Manejo de valores nulos
// Verificar si una cadena tiene valor
string? texto = null;
bool tieneValor = texto.HasValue(); // Devuelve false
// Obtener valor o cadena vacía
string valorSeguro = texto.Value(); // Devuelve ""
// Convertir a nullable
string? otroTexto = " Hola ";
string? textoNullable = otroTexto.ToStringNullable(); // Devuelve "Hola" (trimmed)
// Conversiones a tipos numéricos
string numero = "123";
int? valorInt = numero.ToIntNullable(); // Devuelve 123
decimal valorDecimal = numero.ToDecimal(); // Devuelve 123.0m
DateJsonConverter - Conversión de fechas en JSON
// Configuración en el servicio
services.AddControllers()
.AddJsonOptions(options =>
{
options.JsonSerializerOptions.Converters.Add(new DateJsonConverter());
options.JsonSerializerOptions.Converters.Add(new DateOnlyJsonConverter());
});
// Al serializar/deserializar, las fechas se manejarán en el formato establecido
ConvertList - Conversión de colecciones
// Convertir una lista a DataTable
List<MiClase> listaItems = new List<MiClase>
{
new MiClase { Id = 1, Nombre = "Item 1" },
new MiClase { Id = 2, Nombre = "Item 2" }
};
DataTable tabla = listaItems.ToDataTableGet();
// La tabla tendrá columnas Id y Nombre, con los valores correspondientes
ToSerializeJson - Serialización JSON
// Serializar un objeto a JSON
var miObjeto = new { Nombre = "Juan", Edad = 30 };
string json = miObjeto.AsSerializeJson();
// Resultado: {"Nombre":"Juan","Edad":30}
// Serializar una lista
List<int> numeros = new List<int> { 1, 2, 3 };
string jsonLista = numeros.AsSerializeJson();
// Resultado: [1,2,3]
// Deserializar JSON a un objeto
string jsonString = "{\"Nombre\":\"María\",\"Edad\":25}";
MiClase? objeto = jsonString.AsDeserializeJson<MiClase>();
ReactTableRequestDto - Integración con React Table
// En un controlador ASP.NET Core
[HttpPost]
public IActionResult GetData()
{
// Crear objeto de solicitud a partir de la petición HTTP
var request = ReactTableRequestDto.GetReactTable(Request);
// Obtener datos (ejemplo)
var datos = _servicio.ObtenerDatos();
// Aplicar filtrado según el término de búsqueda
if (!string.IsNullOrEmpty(request.Search))
{
datos = datos.Where(d => request.CompareSearch(d.Nombre)).ToList();
}
// Crear respuesta paginada
var resultado = ReactTableResultDto<MiDto>.Success(datos, request);
return Ok(resultado);
}
Manejo de resultados con Result<T>
// En un servicio
public Result<MiDto> ObtenerEntidad(int id)
{
try
{
var entidad = _repositorio.ObtenerPorId(id);
if (entidad == null)
return Result<MiDto>.Failure(DBEntity.Failure("No se encontró la entidad"));
var dto = _mapper.MapToDto(entidad);
return Result<MiDto>.Success(dto);
}
catch (Exception ex)
{
return Result<MiDto>.Failure(ex);
}
}
// En un controlador
[HttpGet("{id}")]
public IActionResult Get(int id)
{
var resultado = _servicio.ObtenerEntidad(id);
if (resultado.CodeError != 0)
return BadRequest(resultado);
return Ok(resultado);
}
ConnectionStringProtector - Protección de cadenas de conexión
// Configuración en Startup.cs
services.AddDataProtection();
services.AddScoped<IConnectionStringProtector>(provider => {
var dataProtectionProvider = provider.GetRequiredService<IDataProtectionProvider>();
var protector = dataProtectionProvider.CreateProtector("ConnectionStrings");
return new ConnectionStringProtector(protector);
});
// Uso en un servicio
public class MiServicio
{
private readonly IConnectionStringProtector _protector;
public MiServicio(IConnectionStringProtector protector)
{
_protector = protector;
}
public void UsarConexion(string connectionString)
{
// Desproteger la cadena de conexión si está protegida
string conexionSegura = _protector.UnProtect(connectionString);
// Usar la cadena de conexión desprotegida
}
}
SelectItemDto y ReactSelectItemDto - DTOs para componentes de selección
// Crear una lista de opciones para un select HTML
var opciones = new List<SelectItemDto>
{
new SelectItemDto("1", "Opción 1"),
new SelectItemDto("2", "Opción 2", true), // Opción seleccionada por defecto
new SelectItemDto("3", "Opción 3") { Disabled = true } // Opción deshabilitada
};
// Crear opciones para React Select
var opcionesReact = new List<ReactSelectItemDto>
{
new ReactSelectItemDto { value = 1, label = "Opción 1" },
new ReactSelectItemDto { value = 2, label = "Opción 2", disabled = true }
};
WorkSheetXlsFunctions - Formateo para Excel
// Obtener formato para Excel
string formatoNumerico = WorkSheetXlsFunctions.FormatForXls("n2");
// Resultado: "#,##0.00"
string formatoMoneda = WorkSheetXlsFunctions.FormatForXls("c2");
// Resultado: "₡ #,##0.00"
string formatoPorcentaje = WorkSheetXlsFunctions.FormatForXls("p1");
// Resultado: "0.0%"
Características principales
Manejo de fechas
- Conversión entre formatos (ES, EN, DB)
- Soporte para DateTime y DateTimeOffset
- Parsing seguro de strings a fechas
- Manejo de zonas horarias
- Serialización JSON personalizada para fechas
Seguridad
- Encriptación AES con vector de inicialización aleatorio
- Encriptación/desencriptación Base64
- Protección de cadenas de conexión
- Generación de contraseñas seguras
Extensiones para manipulación de datos
- Manejo seguro de valores nulos
- Conversión entre tipos (string, int, decimal, etc.)
- Transformación entre colecciones y DataTable
- Serialización/deserialización JSON
Componentes para UI
- Soporte completo para React Table (paginación, ordenamiento, búsqueda)
- DTOs para selectores (HTML y React)
- DTOs para gráficos Apex Charts
- Formateo para Excel
Patrones de resultado
- Clases Result<T> y ResultValue<T> para operaciones con manejo de errores
- Integración con códigos de error de base de datos
- Soporte para excepciones y mensajes personalizados
Licencia
Este proyecto está licenciado bajo la Licencia MIT.
Autor
Desarrollado por José Andrey Salazar Guzmán (Nosabit).
Product | Versions 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. |
-
net9.0
- System.Linq.Dynamic.Core (>= 1.6.0.2)
- System.Text.Json (>= 9.0.3)
NuGet packages (7)
Showing the top 5 NuGet packages that depend on Nosabit.Core:
Package | Downloads |
---|---|
Nosabit.NetReact
Nosabit.NetReact es una biblioteca que facilita la integración entre ASP.NET Core y aplicaciones React. Proporciona extensiones para el manejo de sesiones, procesamiento de formularios, codificación/decodificación de parámetros de consulta, mensajería entre backend y frontend, y automatización de scripts NPM durante el desarrollo. Incluye atributos personalizados para endpoints, decodificación de parámetros y propiedades React, así como utilidades para la manipulación de archivos Excel y mejoras en la respuesta HTTP. |
|
Nosabit.Adapters.Persistence.SqlServer.RepositoryPattern.Abstractions
Biblioteca de abstracciones para implementar el patrón Repository con SQL Server en aplicaciones .NET. Define una interfaz genérica IRepo con operaciones CRUD y consultas complejas para entidades, incluyendo mapeo personalizado, consultas con parámetros dinámicos y soporte para múltiples esquemas y procedimientos almacenados. Esta biblioteca facilita la separación entre la lógica de acceso a datos y la lógica de negocio, mejorando la testabilidad y mantenibilidad del código. |
|
Nosabit.Adapters.Persistence.SqlServer.Abstractions
Nosabit.Adapters.Persistence.SqlServer.Abstractions es una biblioteca de abstracciones para acceso a datos SQL Server que define interfaces para interactuar con bases de datos mediante Dapper. Este paquete proporciona solo las definiciones de interfaces que pueden ser implementadas en paquetes concretos, facilitando la inyección de dependencias y las pruebas unitarias en aplicaciones .NET. |
|
Nosabit.Adapters.Persistence.SqlServer.RepositoryPattern
Package Description |
|
Nosabit.Adapters.Persistence.Mail
Implementación de servicios de correo electrónico para aplicaciones .NET basada en las abstracciones de Nosabit.Adapters.Persistence.Mail.Abstractions. Proporciona un servicio completo para enviar correos con múltiples configuraciones SMTP, soporte para destinatarios múltiples, copias, adjuntos y contenido HTML. Incluye extensiones para facilitar la configuración a través de appsettings.json y la inyección de dependencias en aplicaciones ASP.NET Core. |
GitHub repositories
This package is not used by any popular GitHub repositories.
Version | Downloads | Last updated |
---|---|---|
1.2.3 | 0 | 3 hours ago |
1.2.2 | 0 | 3 hours ago |
1.2.1 | 283 | 9 days ago |
1.2.0 | 166 | 10 days ago |
1.1.8 | 145 | 10 days ago |
1.1.6 | 136 | 10 days ago |
1.1.5 | 126 | 10 days ago |
1.1.4 | 135 | 10 days ago |
1.1.3 | 133 | 10 days ago |
1.1.2 | 200 | 11 days ago |
1.1.1 | 101 | 11 days ago |
1.1.0 | 103 | 11 days ago |
1.0.4 | 156 | 11 days ago |
1.0.3 | 126 | 11 days ago |
1.0.2 | 137 | 12 days ago |
1.0.1 | 133 | 12 days ago |
1.0.0 | 127 | 13 days ago |