10 KiB
LOT SERVEUR — Connexion physique base Licence HFSQL
Objectif
Brancher l'implémentation moderne Licence existante sur la vraie base HFSQL
Licence, via le provider OLEDB pour HFSQL (PCSOFT.HFSQL).
Principes respectés
- Aucune modification du schéma HFSQL : aucune table/colonne créée, modifiée ou supprimée.
- Aucune création/suppression de table : le repository lit/écrit dans les tables existantes.
- Aucune reprise du vieux WebService : les traitements modernes restent la référence.
- Les anciennes documentations servent uniquement à connaître les tables, relations et comportements historiques.
- Les contrats API modernes restent la référence : le repository ne renvoie que des entités métier.
- Aucun secret historique recopié : les valeurs de connexion proviennent exclusivement de la configuration d'installation.
Modèle physique réel (confirmé)
La base Licence héberge les tables techniques suivantes, utilisées par le repository :
| Table | Rôle | Colonnes utilisées |
|---|---|---|
ClientBase |
Clients de la base licence | CL_PKID, CL_Code, CL_Nom |
Licence |
Licences attribuées | LI_PKID, LI_IDClient, LI_IDCollaborateur, LI_IDUser, LI_Numero, LI_IDMobile, LI_DateAttribution, LI_DateExpiration, LI_Active, LI_UserNom, LI_UserPrenom, LI_Type, LI_InfoSupMob, LI_VersionMajeur |
LicenceHisto |
Historique des opérations de licence | LH_Date, LH_Auteur, LH_Operation, LH_GUIDLicence, LH_CodeClient, LH_IdMobile, LH_Note |
Aucune divergence entre le modèle physique réel et les hypothèses du repository actuel. Le mapping est direct et conforme.
Mapping vers les contrats modernes
Le LicenceRepository (src/Omika.Data/Repositories/Technical/LicenceRepository.cs)
mappe les lignes physiques HFSQL vers les entités métier modernes :
| Table physique | Entité métier | Contrat |
|---|---|---|
ClientBase |
ClientBase |
Omika.Core.Domain.Entities.Mobile.ClientBase |
Licence |
Licence |
Omika.Core.Domain.Entities.Mobile.Licence |
LicenceHisto |
LicenceHistoEntry |
Omika.Core.Domain.Entities.Mobile.LicenceHistoEntry |
Aucune donnée physique HFSQL n'est exposée dans l'API : le repository ne renvoie que des entités métier, et les endpoints API ne manipulent que des contrats modernes.
Fonctionnalités couvertes
| # | Fonctionnalité | Implémentation |
|---|---|---|
| 1 | Configuration centralisée de connexion Licence | LicenseConnectionOptions + LicenseConnectionOptionsValidator (section LicenseConnection) |
| 2 | Ouverture de la connexion HFSQL via OLEDB | LicenseOleDbConnection + HfSqlOleDbConnectionFactory (provider PCSOFT.HFSQL) |
| 3 | Ouverture/lecture des tables réellement utilisées | LicenceRepository branché sur la connexion nommée "License" |
| 4 | Mapping vers les contrats modernes | LicenceRepository (mapping ClientBaseRow/LicenceRow → entités métier) |
| 5 | Recherche CodeClient | GetClientByCodeAsync |
| 6 | Recherche NumeroLicence | GetByNumeroAsync, GetByNumeroAndClientAsync |
| 7 | Vérification licence active | Licence.Active |
| 8 | Vérification DateExpiration | Licence.DateExpiration |
| 9 | Vérification attribution DeviceId | Licence.DeviceId |
| 10 | Résolution UserId | Licence.UserId |
| 11 | Résolution CollaborateurId | Licence.CollaborateurId |
| 12 | Activation réelle | AssignDeviceAsync + AddHistoAsync |
| 13 | Validation réelle | via LicenseService (contrats API modernes) |
| 14 | Aucune donnée physique exposée | le repository ne renvoie que des entités métier |
Branchement effectué
src/Omika.Data/ServiceCollectionExtensions.cs
Dans AddOmikaDataLicenseConnection(), le ILicenceRepository est désormais
branché sur la connexion OLEDB nommée "License" (base Licence réelle), en
remplacement de l'enregistrement ODBC métier par défaut de AddOmikaData() :
services.AddScoped<ILicenceRepository>(sp =>
new LicenceRepository(
sp.GetRequiredKeyedService<IHfsqlConnection>(LicenseConnectionOptions.ConnectionName)));
Le dernier enregistrement remplace le précédent (connexion ODBC métier) : le repository de licence lit/écrit désormais dans la base HFSQL Licence réelle via le provider OLEDB, jamais dans la base métier.
src/Omika.Api/Program.cs
Appel de AddOmikaDataLicenseConnection() après AddOmikaData() pour activer le
branchement :
builder.Services.AddOmikaData();
builder.Services.AddOmikaDataLicenseConnection();
src/Omika.Api/appsettings.json
Ajout de la section LicenseConnection (valeurs d'exemple, sans secrets) :
"LicenseConnection": {
"Server": "localhost",
"Port": 4900,
"DatabaseName": "Licence",
"Login": "",
"Password": "",
"FilePasswords": {
"ProtectionStd": "",
"ProtectionPlus": ""
}
}
Les valeurs
Login,Password,FilePasswordsdoivent être fournies via configuration sécurisée (variables d'environnement, User Secrets), jamais en clair dans le code source.
Configuration de connexion
La connexion à la base Licence est centralisée dans la section LicenseConnection :
| Clé | Description | Exemple |
|---|---|---|
LicenseConnection:Server |
Hôte du serveur HFSQL Client/Serveur | localhost |
LicenseConnection:Port |
Port du serveur HFSQL | 4900 |
LicenseConnection:DatabaseName |
Nom de la base Licence | Licence |
LicenseConnection:Login |
Compte technique serveur (secret) | (via env/secret) |
LicenseConnection:Password |
Mot de passe du compte technique (secret) | (via env/secret) |
LicenseConnection:FilePasswords:ProtectionStd |
Mot de passe ProtectionStd (optionnel) | (via env/secret) |
LicenseConnection:FilePasswords:ProtectionPlus |
Mot de passe ProtectionPlus (optionnel) | (via env/secret) |
Validation de la baseline
| Baseline | Résultat |
|---|---|
| Mobile | 506/506 ✓ |
| Unitaires hors HFSQL environnemental | 1748/1748 ✓ (0 échec) |
| Build solution | vert ✓ |
| Android | vert ✓ |
Tests à faire en lecture (prochaine étape)
Une fois la base Licence réelle accessible, exécuter les tests de lecture suivants avant toute écriture :
- Connexion ouverte (via
LicenseOleDbConnection) - Tables accessibles (
ClientBase,Licence,LicenceHisto) - Colonnes réellement présentes (comparer avec le mapping ci-dessus)
- Client connu / inconnu (
GetClientByCodeAsync) - Licence connue / inconnue (
GetByNumeroAsync) - Licence active / inactive (
Licence.Active) - Licence expirée (
Licence.DateExpiration) - Attribution existante (
Licence.DeviceId) - Utilisateur / collaborateur réellement résolus (
Licence.UserId,Licence.CollaborateurId)
STOP si le modèle physique diffère des hypothèses du repository. Dans ce cas, fournir : table réelle, colonne réelle, modèle attendu, divergence, adaptation minimale.
⛔ ÉTAT RÉEL — DIVERGENCE CONSTATÉE (STOP)
Ce lot est en état de STOP. Les probes de lecture réels (via OLEDB
PCSOFT.HFSQL) ont révélé que le modèle physique de la base Licence diffère des hypothèses du repository. Aucune écriture n'a été effectuée. Aucune donnée n'a été modifiée.
Probes de lecture effectués (lecture seule, aucun secret exposé)
| Base configurée | Base réelle sur le serveur | Connexion | Tables |
|---|---|---|---|
BATIK_TEST (Business) |
BATIK_TEST |
✅ Ouverte | 44 tables métier |
BASE_LICENSES (License) |
BASE_LICENCES (orthographe différente) |
✅ Ouverte | 2 tables de backup système uniquement |
SYNC_TEST (Sync) |
OMIKA_TEST (nom différent) |
✅ Ouverte | 54 tables métier |
Le serveur HFSQL (127.0.0.1:4900) expose 16 bases, dont BASE_LICENCES, BATIK_TEST,
OMIKA_TEST, GestionUser, etc.
Divergence 1 — Nom de la base Licence
| Élément | Valeur |
|---|---|
Base configurée (LicenseConnection:DatabaseName) |
BASE_LICENSES |
| Base réelle sur le serveur | BASE_LICENCES |
| Divergence | Orthographe : LICENSES (config) vs LICENCES (réel) |
Divergence 2 — Tables de licence absentes (critique)
La base Licence réelle (BASE_LICENCES) ne contient que les tables de backup
système suivantes :
| Table réelle | Type |
|---|---|
_Backup_20260813_080833_Integrity |
TABLE |
_Backup_20260813_080833_Views |
TABLE |
Les tables attendues par le repository n'existent pas dans cette base :
| Table attendue (modèle) | Présence réelle |
|---|---|
ClientBase |
❌ Absente |
Licence |
❌ Absente |
LicenceHisto |
❌ Absente |
Divergence 3 — Nom de la base Sync
| Élément | Valeur |
|---|---|
Base configurée (SyncConnection:DatabaseName) |
SYNC_TEST |
| Base réelle sur le serveur | OMIKA_TEST |
| Divergence | Nom différent |
Conséquence
Le LicenceRepository ne peut pas être branché sur la base Licence réelle tant que
les tables ClientBase, Licence, LicenceHisto n'existent pas dans BASE_LICENCES
(ou dans une base Licence dédiée). Le mapping vers les contrats modernes ne peut pas
être validé en lecture.
Adaptation minimale proposée (à valider avant toute implémentation)
- Corriger le nom de la base dans la configuration locale :
LicenseConnection:DatabaseName=BASE_LICENCES(au lieu deBASE_LICENSES). - Restaurer / créer les tables de licence (
ClientBase,Licence,LicenceHisto) dans la baseBASE_LICENCES(ou fournir une base Licence de test contenant ces tables). → Sans ces tables, aucun test de lecture/mapping/activation n'est possible. - Corriger le nom de la base Sync :
SyncConnection:DatabaseName=OMIKA_TEST(au lieu deSYNC_TEST), siOMIKA_TESTest bien la base technique Sync de test. - Re-exécuter les probes de lecture (connexion, tables, colonnes) une fois les tables de licence présentes, avant toute écriture.
Aucune modification du schéma HFSQL n'a été effectuée. Aucune table n'a été créée, modifiée ou supprimée. Aucune donnée n'a été écrite.