Sobre el proyecto

Descripción general Este repositorio, sqlite-multi-tenant, es un gestor de bases de datos SQLite multi-inquilino para .NET (descrito en los metadatos del repositorio como un proveedor de aislamiento por inquilino, migraciones y copias de seguridad). El README es una referencia clase por clase: cada sección documenta un servicio, ayudante o validador e ilustra su funcionamiento con ejemplos de uso en C#. Está escrito como documentación de API en lugar de una guía de inicio rápido, por lo que el material a continuación refleja lo que el README demuestra realmente. Estrategias de multi-tenancy Las pruebas de aislamiento de extremo a extremo del README describen dos enfoques compatibles: - Conexión por inquilino (Connection-per-tenant): cada inquilino está respaldado por su propio archivo físico de SQLite, lo que proporciona aislamiento a nivel de archivo. La cadena de conexión de un inquilino apunta únicamente a la base de datos de ese inquilino. - Esquema compartido (Shared-schema): todos los inquilinos comparten un único archivo de SQLite, y una columna discriminadora TenantId delimita cada consulta para que cada inquilino solo lea o escriba sus propias filas. Las pruebas de aislamiento se presentan como comprobaciones deliberadamente hostiles para asegurar que un inquilino no pueda leer, actualizar o eliminar las filas de otro inquilino bajo ninguno de los dos modelos. El código de prueba de ejemplo crea archivos de base de datos temporales por inquilino, inserta documentos etiquetados por inquilino y afirma que las consultas con un filtro TenantId devuelven solo los títulos de ese inquilino. Se muestra el mismo patrón para un archivo compartido que contiene filas de varios inquilinos. Los métodos ayudantes en los ejemplos construyen cadenas de conexión, crean una tabla Documents con columnas Id, TenantId y Title, insertan filas con comandos parametrizados y leen títulos filtrados por inquilino. Comprobación de integridad IntegrityCheckService realiza operaciones SQLite PRAGMA integrity_check en las bases de datos de los inquilinos. Puntos de entrada documentados: - Comprobar un único inquilino por id. - Comprobar una lista explícita de inquilinos, con un argumento maxDegreeOfParallelism. - Comprobar todos los inquilinos del sistema, también con paralelismo configurable. - Comprobar solo los inquilinos activos. Los resultados se presentan como objetos TenantIntegrityCheckResult que exponen al menos TenantId e IsOk. El paralelismo configurable se presenta como una forma de gestionar la carga del sistema durante la validación. Ayudantes de contexto de inquilino TenantContextHelperExtensions añade métodos de extensión a TenantContextHelper para trabajar dentro de ámbitos multi-inquilino. El README muestra: comprobar si el inquilino actual coincide con un id de destino, crear un ámbito validado que puede transportar un id de inquilino y un id de usuario y que se utiliza en un bloque using, recuperar el contexto de inquilino requerido, recuperar el id de inquilino requerido directamente y ejecutar una acción o una función que devuelve un valor dentro de un contexto de inquilino especificado. Estos están destinados a reducir la infraestructura repetitiva en las rutas de código conscientes del inquilino. Validación de Middleware Se documentan dos validadores: - RateLimitingMiddlewareValidation valida una instancia de RateLimitingMiddleware, un objeto RateLimitingConfig (con campos como MaxRequestsPerSecond, MaxBurst, WindowSize, Enabled y BanDuration), un RateLimitExceededResult (IsExceeded, RetryAfter, CurrentRequestCount, Limit, Window) y RateLimitStatistics (TotalRequests, AllowedRequests, DeniedRequests, PeakRequestsPerSecond, CurrentActiveLimits). Para cada sobrecarga, el README muestra que Validate devuelve una lista de cadenas de problemas, IsValid devuelve un booleano y EnsureValid lanza una excepción cuando la entrada no es válida. Un ejemplo de flujo de trabajo valida la configuración del middleware antes de su uso y captura la excepción de argumento resultante. - ErrorHandlingMiddlewareValidation proporciona métodos de extensión que validan una instancia de ErrorHandlingMiddleware y objetos Result. Comprueba referencias nulas, la coherencia entre los indicadores de éxito y los mensajes de error, y que los resultados exitosos lleven un valor distinto al predeterminado. La superficie documentada es Validate, IsValid y EnsureValid en el middleware, además de los mismos tres métodos en los valores Result, para que los invariantes puedan aplicarse tempranamente en el pipeline de solicitudes. Acceso a configuraciones SettingsControllerExtensions añade operaciones fuertemente tipadas y por lotes a SettingsController. Los métodos documentados incluyen: leer una configuración como un tipo concreto, opcionalmente con una función de análisis personalizada (por ejemplo, para DateTime); escribir un valor fuertemente tipado; actualizar un diccionario de configuraciones en una sola llamada por lotes; probar si existe una configuración; y recuperar configuraciones filtradas por un predicado, devolviendo una lista de valores de configuración. Los resultados se envuelven en un objeto de respuesta de API con una carga útil Data, como muestran las comprobaciones de OkObjectResult en los ejemplos. Utilidades de serialización - ReportGeneratorJsonExtensions envuelve la serialización de System.Text.Json para datos de monitoreo: resúmenes de salud, estadísticas de operación y métricas de rendimiento. Documenta ToJson para escribir, FromJsonToOperationStatistics para leer estadísticas y TryFromJson para métricas de rendimiento con un resultado booleano de éxito. - StringUtilitiesJsonExtensions serializa y deserializa cadenas, con variantes que adjuntan un hash SHA256 o convierten a snake_case, además de un método de intento de deserialización que informa del éxito sin lanzar excepciones. Utilidades de prueba TenantNameValidatorTestsExtensions suministra ayudantes de estilo de aserción para la validación de nombres de inquilinos: verificar que un nombre se mapee a un id de inquilino normalizado esperado, que un nombre se considere un id de inquilino válido, que un nombre no válido produzca un mensaje de error específico esperado y enumerar las colecciones integradas de ids de inquilinos no válidos con sus errores y mapeos válidos de nombre a id. Estos están destinados a ser reutilizados desde las suites de prueba. Notas para la evaluación El README es una documentación de APIs individuales con fragmentos de uso; no incluye instrucciones de instalación, nombres de paquetes, versiones de .NET compatibles, guías paso a paso de migración o copia de seguridad, ni detalles de licencia y contribución, a pesar de que las migraciones y copias de seguridad se mencionan en la descripción del repositorio. Los ejemplos hacen referencia a espacios de nombres como SqliteMultiTenant.Services, SqliteMultiTenant.Models, SqliteMultiTenant.Utilities, SqliteMultiTenant.Middleware, SqliteMultiTenant.Monitoring, SqliteMultiTenant.Validation y SqliteMultiTenant.Api.Controllers, y dependen de System.Data.SQLite y un marco de pruebas. Los lectores deben tratar los ejemplos como ilustrativos y confirmar las APIs actuales, el empaquetado y las garantías de aislamiento contra el código fuente antes de adoptarlos. Los bloques repetidos al final del README sugieren cierta duplicación en el documento mismo.