7.2 KiB
LOT SERVEUR — CONNEXION PHYSIQUE BASE SERVICE (HFSQL)
OBJECTIF
Brancher l'implémentation moderne de synchronisation mobile existante sur la
vraie base HFSQL Service, via le provider OLE DB PCSOFT.HFSQL.
Cette base Service est distincte de la base métier Batik/Omika (ODBC), de la base Licence et de la base technique Sync : elle héberge les tables techniques du service de synchronisation.
IMPORTANT
- aucune modification du schéma HFSQL ;
- aucune création/suppression de table ;
- aucune reprise du vieux WebService ;
- les anciennes documentations servent uniquement à connaître les tables, relations et comportements historiques ;
- les traitements modernes peuvent être différents ;
- les contrats API modernes restent la référence ;
- aucun secret historique ne doit être recopié.
TOPOLOGIE RÉELLE CONSTATÉE (probes de lecture)
Les probes de lecture réels (via OLEDB PCSOFT.HFSQL) ont révélé la topologie
physique suivante sur le serveur HFSQL (127.0.0.1:4900) :
| Base réelle | Rôle | Tables techniques |
|---|---|---|
BATIK.01_BLS |
Base Service (service de synchronisation) | TOSRV, TOMOB, MOBILES, PARAMETRES |
BATIK_TEST |
Base métier Batik (Business) | 44 tables métier |
OMIKA_TEST |
Base technique Sync | 54 tables métier |
BASE_LICENCES |
Base Licence | tables de backup système uniquement |
Matrice physique des tables de synchronisation
| Table | Base réelle | Rôle |
|---|---|---|
TOSRV |
BATIK.01_BLS (Service) |
File d'entrée des opérations reçues du mobile |
MobReception |
base métier WebService | File de travail des opérations transférées |
MobLog |
base métier WebService | Journal des états terminaux |
Divergence structurelle : le
SyncTransferRepositoryactuel est mono-connexion et suppose queTOSRV,MobReceptionetMobLogsont dans la même base. Or la topologie réelle répartit ces tables sur deux bases distinctes (TOSRVdans la base Service,MobReception/MobLogdans la base métier WebService). Le repository actuel est donc insuffisant pour cette topologie.
CONFIGURATION CENTRALISÉE
La connexion Service est configurée dans la section ServiceConnection des
fichiers de configuration .NET (appsettings / variables d'environnement /
secrets) :
"ServiceConnection": {
"Server": "127.0.0.1",
"Port": 4900,
"DatabaseName": "BATIK.01_BLS",
"Login": "",
"Password": "",
"FilePasswords": {
"ProtectionStd": null,
"ProtectionPlus": null
}
}
Server/Port: serveur HFSQL Client/Serveur.DatabaseName: nom de la base Service (BATIK.01_BLS).Login/Password: compte technique serveur (jamais en clair en source).FilePasswords: mots de passe de fichiers HFSQL (ProtectionStd / ProtectionPlus), propres à l'installation. Optionnels.
Mot de passe optionnel
Selon le client, la connexion Service peut être configurée avec un mot de passe
absent (null), vide ("") ou renseigné. Le validateur et le
constructeur OLEDB acceptent proprement les trois cas. Aucun mot de passe
fictif n'est jamais inventé lorsque la valeur est absente.
OUVERTURE DE LA CONNEXION VIA OLEDB
La connexion Service est enregistrée comme IHfsqlConnection nommée "Service"
(ServiceConnectionOptions.ConnectionName), distincte de la connexion métier ODBC
par défaut, de la connexion Licence et de la connexion Sync.
ServiceConnectionOptions: options de connexion (sectionServiceConnection).ServiceConnectionOptionsValidator: validation minimale (règle pure, testable).HfSqlConnectionOptionsFactory.CreateForService(...): traduction vers les options OLE DB.ServiceOleDbConnection: connexion OLE DB réutilisant le contratIHfsqlConnection(lecture, métadonnées), alimentée par la fabrique OLE DB.
ServiceOleDbConnection
La connexion Service expose :
Options: unHfsqlOptionsminimal dérivé des options Service (sans secret), avecConnectionName = "Service",DatabaseName,Login.OpenAsync/CloseAsync/DisposeAsync: cycle de vie de la connexion.QueryAsync/ExecuteScalarAsync/ExecuteNonQueryAsync: lecture/écriture.GetColumnsAsync: métadonnées des colonnes d'une table.
BRANCHEMENT DU REPOSITORY — MULTI-CONNEXION IMPLÉMENTÉ
AddOmikaDataServiceConnection() (dans Omika.Data) :
- enregistre la configuration
ServiceConnection(sectionServiceConnection) ; - enregistre le validateur
ServiceConnectionOptionsValidator; - enregistre la fabrique OLE DB
IHfSqlOleDbConnectionFactory; - enregistre la connexion
IHfsqlConnectionnommée"Service"(Scoped) ; - enregistre le wrapper
IServiceHfSqlConnection(Scoped) autour de la connexion Service.
✅ Implémenté : le
SyncTransferRepositoryest désormais multi-connexion. Il reçoit deux connexions explicites :IServiceHfSqlConnection(base Service, tableTOSRV) etIWebServiceHfSqlConnection(base WebService/Business, tablesMobReceptionetMobLog). Le routage des opérations est documenté dansLOT_SERVEUR_SYNC_CONNECTION.md.
Rôle de la connexion Service
La connexion Service (IServiceHfSqlConnection) est utilisée uniquement pour
les opérations sur la table TOSRV :
InsertToSrvAsync: insertion d'une opération reçue du mobile.GetStatusAsync/GetExistingStateAsync: recherche d'une opération dans TOSRV.TransferToReceptionAsync: lecture de TOSRV et suppression après transfert réussi.
Aucune opération MobReception / MobLog ne passe par la connexion Service.
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.
VALIDATION DE LA BASELINE
| Élément | Résultat |
|---|---|
| Build solution | Vert (0 erreur) |
| Build Android | Vert (0 erreur) |
| Tests unitaires (hors HFSQL environnemental) | 1748/1748 (0 échec) |
Note sur les tests
Les 10 tests HfSqlOleDb*IntegrationTests échouent car ils nécessitent un serveur
HFSQL réel non démarré dans cet environnement (La connexion au serveur <:0> a échoué). Ces tests sont hors baseline (tests environnementaux).
Les nouveaux tests ajoutés pour la connexion Service passent tous :
ServiceConnectionOptionsValidatorTests(13 tests) : validation, mot de passe optionnel,ToStringsans secret.ServiceOleDbConnectionTests(12 tests) : cycle de vie, lecture, options,CreateForService.HfSqlOleDbConnectionStringBuilderTests: construction OLEDB avec mot de passe optionnel.ServiceCollectionExtensionsTests: enregistrement DI de la connexion Service.
PROCHAINES ÉTAPES (LECTURE SEULE D'ABORD)
Avant toute écriture, prouver en lecture seule :
- connexion Service ouverte ;
- tables accessibles (
TOSRV,TOMOB,MOBILES,PARAMETRES) ; - colonnes réellement présentes ;
- opération connue / inconnue ;
- état terminal / en attente ;
- mapping JSON cohérent.
STOP si le modèle physique diffère des hypothèses du repository actuel. Dans ce cas fournir : table réelle, colonne réelle, modèle attendu, divergence, adaptation minimale proposée.