À propos du projet

Aperçu Ce dépôt, sqlite-multi-tenant, est un gestionnaire de base de données SQLite multi-tenant pour .NET (décrit dans les métadonnées du dépôt comme fournissant l'isolation par tenant, des migrations et des sauvegardes). Le README est une référence classe par classe : chaque section documente un service, un helper ou un validateur et l'illustre avec des exemples d'utilisation en C#. Il est rédigé comme une documentation d'API plutôt que comme un guide de démarrage, donc le contenu ci-dessous reflète ce que le README démontre réellement. Stratégies de multi-tenancy Les tests d'isolation de bout en bout du README décrivent deux approches prises en charge : - Connexion par tenant : chaque tenant est soutenu par son propre fichier SQLite physique, offrant une isolation au niveau du fichier. La chaîne de connexion d'un tenant pointe uniquement vers la base de données de ce tenant. - Schéma partagé : tous les tenants partagent un seul fichier SQLite, et une colonne discriminateur TenantId limite chaque requête afin que chaque tenant ne puisse lire ou écrire que ses propres lignes. Les tests d'isolation sont présentés comme des vérifications délibérément hostiles pour s'assurer qu'un tenant ne peut pas lire, mettre à jour ou supprimer les lignes d'un autre tenant sous l'un ou l'autre modèle. Le code de test d'exemple crée des fichiers de base de données temporaires par tenant, insère des documents marqués par tenant et affirme que la requête avec un filtre TenantId ne renvoie que les titres de ce tenant. Le même modèle est montré pour un fichier partagé contenant des lignes pour plusieurs tenants. Des méthodes d'aide dans les exemples construisent des chaînes de connexion, créent une table Documents avec des colonnes Id, TenantId et Title, insèrent des lignes avec des commandes paramétrées et lisent les titres filtrés par tenant. Vérification de l'intégrité IntegrityCheckService effectue des opérations SQLite PRAGMA integrity_check sur les bases de données des tenants. Points d'entrée documentés : - Vérifier un seul tenant par id. - Vérifier une liste explicite de tenants, avec un argument maxDegreeOfParallelism. - Vérifier tous les tenants du système, également avec un parallélisme configurable. - Vérifier uniquement les tenants actifs. Les résultats sont exposés sous forme d'objets TenantIntegrityCheckResult affichant au moins TenantId et IsOk. Le parallélisme configurable est présenté comme un moyen de gérer la charge du système pendant la validation. Helpers de contexte tenant TenantContextHelperExtensions ajoute des méthodes d'extension à TenantContextHelper pour travailler à l'intérieur de scopes multi-tenant. Le README montre : la vérification si le tenant actuel correspond à un id cible, la création d'un scope validé pouvant transporter un id de tenant et un id d'utilisateur et utilisé dans un bloc using, la récupération du contexte tenant requis, la récupération directe de l'id du tenant requis, et l'exécution d'une action ou d'une fonction retournant une valeur à l'intérieur d'un contexte tenant spécifié. Ceux-ci visent à réduire la plomberie répétitive autour des chemins de code sensibles au tenant. Validation du middleware Deux validateurs sont documentés : - RateLimitingMiddlewareValidation valide une instance de RateLimitingMiddleware, un objet RateLimitingConfig (avec des champs tels que MaxRequestsPerSecond, MaxBurst, WindowSize, Enabled et BanDuration), un RateLimitExceededResult (IsExceeded, RetryAfter, CurrentRequestCount, Limit, Window) et RateLimitStatistics (TotalRequests, AllowedRequests, DeniedRequests, PeakRequestsPerSecond, CurrentActiveLimits). Pour chaque surcharge, le README montre Validate retournant une liste de chaînes de problèmes, IsValid retournant un booléen, et EnsureValid levant une exception lorsque l'entrée est invalide. Un exemple de flux de travail valide la configuration du middleware avant utilisation et capture l'exception d'argument résultante. - ErrorHandlingMiddlewareValidation fournit des méthodes d'extension qui valident une instance de ErrorHandlingMiddleware et des objets Result. Il vérifie les références nulles, la cohérence entre les indicateurs de succès et les messages d'erreur, et que les résultats réussis transportent une valeur non par défaut. La surface documentée comprend Validate, IsValid et EnsureValid sur le middleware, plus ces trois mêmes méthodes sur les valeurs Result, afin que les invariants puissent être appliqués tôt dans le pipeline de requête. Accès aux paramètres SettingsControllerExtensions ajoute des opérations fortement typées et par lots à SettingsController. Les méthodes documentées incluent : la lecture d'un paramètre en tant que type concret, optionnellement avec une fonction d'analyse personnalisée (par exemple pour DateTime) ; l'écriture d'une valeur fortement typée ; la mise à jour d'un dictionnaire de paramètres en un seul appel par lot ; le test de l'existence d'un paramètre ; et la récupération de paramètres filtrés par un prédicat, retournant une liste de valeurs de paramètres. Les résultats sont encapsulés dans un objet de réponse API avec une charge utile Data, comme le montrent les vérifications OkObjectResult dans les exemples. Utilitaires de sérialisation - ReportGeneratorJsonExtensions encapsule la sérialisation System.Text.Json pour les données de surveillance : résumés de santé, statistiques d'opération et métriques de performance. Il documente ToJson pour l'écriture, FromJsonToOperationStatistics pour la lecture des statistiques, et TryFromJson pour les métriques de performance avec un résultat de succès booléen. - StringUtilitiesJsonExtensions sérialise et désérialise des chaînes, avec des variantes qui joignent un hachage SHA256 ou convertissent en snake_case, plus une méthode de tentative de désérialisation qui signale le succès sans lever d'exception. Utilitaires de test TenantNameValidatorTestsExtensions fournit des helpers de style assertion pour la validation du nom du tenant : vérifier qu'un nom correspond à un id de tenant normalisé attendu, qu'un nom est considéré comme un id de tenant valide, qu'un nom invalide produit un message d'erreur spécifique attendu, et énumérer les collections intégrées d'ids de tenants invalides avec leurs erreurs et les mappages nom-vers-id valides. Ceux-ci sont destinés à être réutilisés depuis des suites de tests. Notes pour l'évaluation Le README est une documentation d'API individuelles avec des extraits d'utilisation ; il n'inclut pas d'instructions d'installation, de noms de packages, de versions .NET supportées, de guides de migration ou de sauvegarde, ni de détails sur la licence et la contribution, même si les migrations et les sauvegardes sont mentionnées dans la description du dépôt. Les exemples font référence à des espaces de noms tels que SqliteMultiTenant.Services, SqliteMultiTenant.Models, SqliteMultiTenant.Utilities, SqliteMultiTenant.Middleware, SqliteMultiTenant.Monitoring, SqliteMultiTenant.Validation et SqliteMultiTenant.Api.Controllers, et ils dépendent de System.Data.SQLite et d'un framework de test. Les lecteurs doivent traiter les exemples comme illustratifs et confirmer les API actuelles, le packaging et les garanties d'isolation par rapport au code source avant de les adopter. Les blocs répétés à la fin du README suggèrent certaines duplications dans le document lui-même.