SDK .NET
El paquete NuGet Dinaup para .NET: cliente de la API, acceso a PostgreSQL, logs, notificaciones, validaciones, almacenamiento S3, utilidades, ASP.NET Core, Vault, apps externas, Redis y cultura.
El SDK .NET de Dinaup es un único paquete NuGet, Dinaup, con un módulo por cada aspecto de una aplicación. Trae cliente de la API, base de datos, logs, notificaciones, validaciones, almacenamiento, utilidades, ASP.NET Core, secretos, apps externas, eventos Redis y cultura. Cada módulo se usa por separado; ninguno obliga a usar los demás.
El paquete es para net10.0.
Instalación
dotnet add package DinaupEl paquete trae StackExchange.Redis 3.2.1 y protobuf-net 3.4.30 como versión mínima. Si tu proyecto fija alguno por debajo, la restauración falla con NU1605: sube tu referencia o quítala.
Para trabajar tipado contra tu modelo de datos (secciones, informes, documentos), añade tu biblioteca MyDinaup. La clave de conexión y la clave API que pide el cliente salen de Play: Cliente Dinaup.
Módulos
Cliente Dinaup
Apps multi-tenant
LoadAllRowsAsync
IAQuery
QuickQuery
Dinaup.Database
Dinaup.Logs
Notificaciones ntfy
Dinaup.Validations
Utilidades
Almacenamiento S3
ASP.NET Core
Vault
Módulos auxiliares
Piezas más pequeñas que también incluye el paquete Dinaup.
Inicio de sesión de empleados (authclient)
DinaupAuthClient, en el namespace Dinaup.Auth, autentica las credenciales de un empleado contra auth.dinaup.com y devuelve la empresa a la que pertenece.
using Dinaup.Auth;
var auth = new DinaupAuthClient();
var res = await auth.LoginAsync(email, password);
if (res != null)
{
// res.TenantConnectionKeyword identifica la empresa; res.UserEmail, res.UserId y res.LicSerie completan la respuesta
}LoginAsync devuelve un AuthResponse (TenantConnectionKeyword, UserEmail, UserId, LicId, LicSerie, ApiEndpoint, Version, Revision, TwoFactor) o null si las credenciales fallan. El montaje completo de una app con este inicio de sesión está en Apps multi-tenant.
Apps externas (myapps)
Para apps externas que operan sobre una empresa:
MyAppClient: hereda deDinaupClientC(toda la API del cliente). AñadeExecuteReport(porReportRequestParameterso por id de informe, con búsqueda, filtros, variables y modo administrador) y las propiedades de la sesión (LicenseId,UserId,Email,Nombre,IP,UserAgent,IsLogged).MyAppKVClient: almacén clave-valor de la app (SetKVAsyncyGetKVAsync, hasta 10 MB por valor). ImplementaIHealthCheck.
Excepciones (exceptions)
La clase Dinaup.Exceptions agrupa ClientNotInitializedException, APIConnectionException, InvalidAPIResponseException, TimeoutException, APIOperationException, FormClosedException, RetryLimitExceeded y APIRequestException. Cáptalas para distinguir un cliente sin inicializar de un fallo de conexión, una respuesta inválida o un timeout. FormClosedException hereda de APIOperationException. FormSave la lanza cuando el formulario ya no está abierto (cancelado, caducado o con un token que no existe), y entonces no se ha guardado nada.
Cultura y zona horaria (cultureservice)
CultureService (interfaz ICultureService, namespace Dinaup.CultureService) formatea fechas, importes y decimales según la cultura y la zona horaria del usuario, y convierte entre UTC y hora local: ToLocal, ToUtc, ToDateOnly, ToStringMoney, ToStringDecimal, ToLocalFriendlyDate, ToLocalFriendlyDateTime, LocalNow y DateOnlyNow. Se construye con un IHttpContextAccessor y detecta la cultura de la cabecera Accept-Language. Los valores por defecto de CultureServiceOptions son DefaultCulture = "es-ES", WindowsTimeZoneId = "Romance Standard Time", IanaTimeZoneId = "Europe/Madrid" y DetectCultureFromAcceptLanguage = true.
builder.Services.AddHttpContextAccessor();
builder.Services.AddScoped<Dinaup.CultureService.ICultureService, Dinaup.CultureService.CultureService>();Modelos de configuración (models)
El namespace Dinaup.Models trae los contenedores de credenciales y los modelos de cuenta:
| Clase | Qué guarda |
|---|---|
DinaupClientSettings(endPoint, aPIKey, secretKey) | Las tres credenciales del cliente. new DinaupClientC(settings) las aplica. |
DinaupExternalAppSettings | AppId y AppToken de una app externa. Se construye con un VaultData (claves DINAUP_APPID y DINAUP_APPTOKEN) o con los dos valores. |
DinaupWebhookSettings(endPoint, token) | Endpoint y token de un webhook. |
AccountCreationModel, AccountActivationModel, PasswordRecoveryModel, ChangePasswordModel, SignInModel | Entrada de las operaciones de cuenta de DinaupClientC. Cada uno valida sus campos (GetValidationReason, ValidatePasswordChange, ValidateInput). |
AuthResponse, AuthRequest, AddressModel | Respuesta del inicio de sesión de empleados, petición de inicio de sesión y dirección postal. |
Eventos Redis (redis)
RedisClient, en Dinaup.Redis, recibe los eventos de cambio de una empresa: new RedisClient(connectionString, licenseSerial). Con SubscribeToChangesAsync() recibes cada lote de cambios en el evento ChangesReceived (un MonitoringEvent con Changes, cada uno con RowId, SectionId, Table, UserId, IsUpdate, NewValues y OldValues); UnsubscribeFromChanges() para la escucha. GetLastChangeAsync(sectionId, field) y MayHaveChangesAsync(sectionId, since, field) consultan la marca de último cambio de una sección o de un campo. Qué publica el servidor y cómo se conecta un cliente, en Eventos Redis.
Entorno (Env)
El módulo EnvExtensions da el nombre y la versión de la app (GetAppName, GetAppVersion), el hostname (GetHostName) y un texto de diagnóstico del proceso (GetRuntimeInfoTextAsync). Limits.MaxFileSizeInBytes fija el tamaño máximo de archivo subido: 150 MB.
MyDinaup
Cada empresa tiene su propio modelo de datos. Para trabajarlo tipado necesitas tu biblioteca MyDinaup, con los nombres reales de tus secciones, informes y documentos.
# Tu modelo, generado desde tu licencia
dotnet add package {Empresa}.MyDinaup
# Un modelo de ejemplo, para pruebas
dotnet add package DemoUp.MyDinaupQué contiene, cómo se genera y cómo se usa, en MyDinaup.