Aggiunge un connettore completamente managed per database Visual FoxPro e dBase, utilizzabile come sorgente dati in tutti i flussi dell'applicazione (discovery manuale, esecuzione schedulata, hash/change-detection, backup/restore). ## Motivazione Il provider OLE DB ufficiale (VFPOLEDB.1) è solo a 32-bit, deprecato e richiede installazione separata. Il connettore managed usa DbfDataReader 1.0.0 (MIT), legge direttamente i file .dbf/.fpt/.dbc a 64-bit senza dipendenze esterne e con streaming efficiente (tabelle da centinaia di MB con uso di memoria contenuto). ## Nuovi file - DataConnection/DB/FoxPro/FoxProConnectionInfo.cs Classe sealed con le informazioni di connessione risolte (cartella, percorso .dbc, encoding, flag IncludeDeleted). Proprietà di convenienza IsContainer e DisplayName. - DataConnection/DB/FoxPro/FoxProReader.cs Helper statico che registra CodePagesEncodingProvider, risolve la connection string (path diretto, stile OLE DB con Provider=vfpoledb, chiave=valore), verifica l'accesso al filesystem, legge il catalogo .dbc (il file .dbc è esso stesso un DBF; filtro su OBJECTTYPE='Table' + cross-check esistenza fisica .dbf), enumera le tabelle free, mappa i tipi VFP (Character, Memo, Numeric, Float, Double, Integer, Currency, Date, DateTime, Logical, General) in descrizioni leggibili, esegue streaming dei record via DbfDataReader, auto-rileva l'encoding dall'header DBF (language driver byte) con fallback a code page 1252, e analizza query SELECT [TOP n] * FROM tabella. - DataConnection/DB/FoxProDatabaseManager.cs Implementa IDatabaseManager. Lettura: TestConnectionAsync, GetTableNamesAsync, GetTableSchemaAsync, GetDatabaseSchemaAsync, GetAllRecordsAsync, ExecuteRawQueryAsync, GetPrimaryKeyFieldAsync (ritorna null, selezione manuale chiave), GetAvailableDatabasesAsync, ChangeDatabaseAsync (no-op per sorgenti file-based). Scrittura: tutti i metodi di modifica (Insert/Update/Delete/Upsert/BulkInsert/ ExecuteCommand/ExecuteNonQuery) lanciano NotSupportedException con messaggio esplicito. - DataConnection/DB/EF/SchemaProviders/FoxProSchemaProvider.cs Implementa IDatabaseSchemaProvider delegando a FoxProReader. Gestione errori per tabella in GetDatabaseSchemaAsync (una tabella non apribile non blocca la discovery). - FOXPRO_CONNECTION.md Guida utente: passo-passo per creare la credenziale, formato connection string, tabella tipi VFP supportati, note su sola lettura e limitazioni query, tabella risoluzione problemi (caratteri accentati, tabelle mancanti, ecc.). ## File modificati - DataConnection/DataConnection.csproj Aggiunto DbfDataReader 1.0.0 (porta transitivamente System.Text.Encoding.CodePages >= 10.0.3; rimossa dipendenza esplicita alla versione 9.0.3 che causava NU1605). - DataConnection/DB/Enums/DatabaseType.cs Aggiunto valore Foxpro in fondo all'enum (preserva valori già persistiti). - CredentialManager/Models/CredentialModels.cs Aggiunto DatabaseType.Foxpro all'enum e metodo BuildFoxproConnectionString che genera "Data Source=percorso[;CodePage=n][;IncludeDeleted=true]". - DataConnection/CredentialManagement/Models/CredentialExtensions.cs Mappatura bidirezionale Foxpro tra enum CredentialManager e DataConnection. - DataConnection/CredentialManagement/Services/DataConnectionCredentialService.cs Aggiunto TestFoxproConnection: verifica percorso accessibile, legge nomi tabelle, restituisce messaggio con conteggio tabelle, encoding rilevato e nota sola lettura. - DataConnection/DB/EF/DatabaseSchemaProviderFactory.cs Caso Foxpro => new FoxProSchemaProvider(). - Data_Coupler/Services/DataConnectionFactory.cs Branch Foxpro => new FoxProDatabaseManager(connectionString). - Data_Coupler/Extensions/DataCoupler/DatabaseMethod.cs Aggiunto IsFoxproConnection() e caso Foxpro in CreateLimitedQuery (SELECT TOP n * FROM (query) AS subquery). - CredentialManager/Integration/DataConnectionHelper.cs ValidateDatabaseCredential: introdotto flag isFileBased (Sqlite || Foxpro) per esonerare host/utente/password/porta; messaggio di errore specifico per il campo percorso FoxPro. - Data_Coupler/Pages/CredentialManagement.razor Aggiunta opzione "Visual FoxPro (.dbc / .dbf)" nel selettore tipo database. Sezione di configurazione dedicata: banner sola lettura, campo percorso con esempi (.dbc e cartella), dropdown code page (Auto/1252/1250/1251/850/437/65001), checkbox record cancellati, pannello tipi supportati, anteprima connection string. Fix validazione form test-connessione: branch Foxpro che verifica solo DatabaseName (non Host/Username/Password), eliminando il falso errore "Il campo Host è obbligatorio". Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Data-Coupler
Panoramica
Data-Coupler è una soluzione integrata per la gestione di connessioni dati e credenziali, composta da tre progetti principali:
- CredentialManager: Libreria per la gestione sicura delle credenziali
- DataConnection: Libreria per connessioni a database e API REST
- Data_Coupler: Applicazione Blazor Server per l'interfaccia utente
🆕 Novità Recenti (Febbraio 2026)
- ✅ Salesforce Batch Describe via Composite API: I metadati degli SObject vengono ora recuperati in batch (25 per chiamata) invece di N chiamate singole, riducendo drasticamente il consumo di API durante la discovery
- ✅ Discovery REST Parallela:
DiscoverEntitySummariesAsynceDiscoverEntitiesAsyncvengono eseguite in parallelo; la lista entità diventa interattiva quasi subito, i dettagli arrivano in background - ✅ Fix Scheduler External ID Relationships: Corretti due bug nello schedulatore —
ExternalIdRelationshipsJsoneDefaultValuesJsonvenivano azzerati al re-salvataggio del profilo; i campi sorgente usati nelle relazioni External ID non venivano esclusi dal mapping normale
🆕 Novità Recenti (Gennaio 2026)
- ✅ Schedulazione File CSV/Excel: Supporto completo per schedulare trasferimenti da file
- ✅ Validazione Percorsi: Validazione file prima del salvataggio profili
- ✅ Deletion Sync Configurabile: Controllo granulare sincronizzazione eliminazioni
- ✅ Doppia Modalità File: Caricamento browser (preview) + percorso manuale (schedulazione)
Architettura
CredentialManager
Libreria responsabile per:
- Gestione sicura delle credenziali (Database, REST API)
- Crittografia dei dati sensibili
- Persistenza su database SQLite
- Validazione delle credenziali
DataConnection
Libreria per connessioni dati che include:
- Supporto per database: SQL Server, MySQL, PostgreSQL, Oracle, SQLite, DB2, SAP HANA
- Gestione connessioni REST API
- Integrazione con CredentialManager per l'autenticazione
- Factory pattern per la gestione di diversi provider
Data_Coupler
Applicazione Blazor Server che fornisce:
- Interfaccia web per la gestione delle credenziali
- CRUD completo per credenziali database e REST API
- Test delle connessioni
- Validazione form integrata
Configurazione
1. Database delle Credenziali
L'applicazione utilizza SQLite per memorizzare le credenziali. Il database viene automaticamente creato in:
Data_Coupler/wwwroot/data/credentials.db
2. Registrazione Servizi
Nel Program.cs di Data_Coupler:
// Add CredentialManager services
builder.Services.AddDataConnectionCredentialManagement("Data Source=wwwroot/data/credentials.db");
Utilizzo
Gestione Credenziali via Web Interface
- Avviare l'applicazione Data_Coupler
- Navigare su
/credentials - Utilizzare l'interfaccia per:
- Aggiungere nuove credenziali (Database/REST API)
- Modificare credenziali esistenti
- Testare le connessioni
- Eliminare credenziali
Utilizzo Programmatico
// Iniettare il servizio
@inject IDataConnectionCredentialService CredentialService
// Ottenere opzioni per connessione database
var dbOptions = await CredentialService.GetDbManagerOptionsAsync("MyDatabase");
// Ottenere opzioni per API REST
var apiOptions = await CredentialService.GetRestServiceOptionsAsync("MyApi");
// Gestire credenziali
var credential = new DatabaseCredential
{
Name = "Test",
DatabaseType = DatabaseType.SqlServer,
Host = "localhost",
Port = 1433,
DatabaseName = "TestDB",
Username = "user",
Password = "password"
};
await CredentialService.SaveDatabaseCredentialAsync(credential);
Struttura dei Progetti
Data-Coupler/
├── CredentialManager/ # Gestione credenziali
│ ├── Data/ # DbContext e configurazioni
│ ├── Models/ # Modelli per credenziali
│ └── Services/ # Servizi core
├── DataConnection/ # Connessioni dati
│ ├── CredentialManagement/ # Integrazione con CredentialManager
│ │ ├── Interfaces/ # Interfacce servizi
│ │ ├── Models/ # Extension methods e conversioni
│ │ └── Services/ # Implementazione servizi
│ ├── DB/ # Gestione database
│ └── REST/ # Gestione API REST
└── Data_Coupler/ # Applicazione Blazor
├── Pages/ # Pagine Blazor
│ └── CredentialManagement.razor
├── Shared/ # Componenti condivisi
└── wwwroot/data/ # Database SQLite
Build e Deployment
Prerequisiti
- .NET 9.0 SDK
- Visual Studio 2022 o VS Code
- Docker (opzionale, per deployment containerizzato)
Build Locale
dotnet build Data_Coupler.sln
Esecuzione Locale
dotnet run --project Data_Coupler/Data_Coupler.csproj
L'applicazione sarà disponibile su:
- HTTP: http://localhost:7550
Formati File Supportati
CSV
- Separatori:
,(virgola),;(punto e virgola),\t(tab),|(pipe) - Rilevamento automatico: Sì
- Gestione quote: Supporto completo per campi tra virgolette
- Escape caratteri: Supporto per
""(double quote escape) - Dimensione massima: 50 MB (configurabile)
- Schedulazione: ✅ Supportato con percorso file manuale
Excel
- Formati:
.xlsx(Office Open XML),.xls(Binary Format) - Fogli multipli: Legge il primo foglio per default
- Header: Prima riga utilizzata come intestazione
- Dimensione massima: 50 MB (configurabile)
- Schedulazione: ✅ Supportato con percorso file manuale
Modalità Caricamento File
1. Caricamento Browser (Preview)
- Carica file tramite browser per configurare mapping
- Processato in memoria, non salvato sul server
- Ideale per setup iniziale profilo
2. Percorso Manuale (Schedulazione) ⭐
- Specifica percorso completo file sul server
- Obbligatorio per profili schedulati
- Sistema valida esistenza e leggibilità
- Esempi:
C:\Data\products.csv,/data/customers.xlsx
🐳 Deployment Docker
Quick Start con Docker:
# Pull e run (immagine pubblica)
docker run -d -p 7550:7550 -v data-coupler-data:/var/lib/Data_Coupler ghcr.io/alessiodalsi/data-coupler:latest
# Con Docker Compose
docker-compose up -d
Build Locale:
# Linux
docker build -t data-coupler:local -f Dockerfile .
# Windows
docker build -t data-coupler:local-windows -f Dockerfile.windows .
# Script automatico (PowerShell)
.\build-docker.ps1 -Target all -Test
# Script automatico (Bash)
./build-docker.sh all
Immagini Disponibili:
- Linux/Multi-platform:
ghcr.io/alessiodalsi/data-coupler:latest - Windows:
ghcr.io/alessiodalsi/data-coupler:latest-windows - Development:
ghcr.io/alessiodalsi/data-coupler:development-latest - Dev:
ghcr.io/alessiodalsi/data-coupler:dev-latest - Staging:
ghcr.io/alessiodalsi/data-coupler:staging-latest
Note: Il tag latest viene automaticamente aggiornato sia dal branch main che dal branch development per garantire che le ultime funzionalità siano sempre disponibili. Il tag development-latest è specifico per il branch development.
📚 Documentazione Docker Completa: Vedi DOCKER_DEPLOYMENT.md e GITHUB_ACTIONS_SETUP.md
🔄 CI/CD Pipeline
Il progetto supporta pipeline CI/CD automatiche su:
GitHub Actions (.github/workflows/docker-build.yml):
- Build automatica su push ai branch
main,development,staging - Pubblicazione su GitHub Container Registry (
ghcr.io) - Multi-platform manifest (Linux + Windows)
Gitea Actions (.gitea/workflows/docker-build.yml):
- Stessa configurazione di GitHub Actions
- Pubblicazione su Gitea Container Registry (
gitea.home-nas-ds.org) - Istanza Gitea self-hosted con registry abilitato
- Configurazione:
.gitea/workflows/README.md
Immagini su Gitea (self-hosted):
# Pull da Gitea Container Registry
docker pull gitea.home-nas-ds.org/alessio/data-coupler:latest
# Versioni disponibili
docker pull gitea.home-nas-ds.org/alessio/data-coupler:development-latest
docker pull gitea.home-nas-ds.org/alessio/data-coupler:staging-latest
📚 Setup Gitea: Vedi .gitea/workflows/README.md
Caratteristiche di Sicurezza
- Crittografia: Le password vengono crittografate prima del salvataggio
- Validazione: Validazione completa dei dati in input
- Isolamento: Ogni progetto ha responsabilità specifiche
- Type Safety: Uso di tipi forti per evitare errori
- Validazione File: Verifica esistenza e leggibilità file prima del salvataggio
- Deletion Sync Sicuro:
- Disabilitato di default per prevenire eliminazioni accidentali
- Disponibile solo nelle schedulazioni con configurazione esplicita
- Warning chiaro nell'interfaccia utente per operazioni critiche
- Percorsi File Validati: Controllo permessi e accessibilità per schedulazioni
Testing
L'applicazione include funzionalità di test per:
- Connessioni database
- Chiamate API REST
- Validazione credenziali
Il testing può essere eseguito direttamente dall'interfaccia web.
Log e Monitoring
I servizi utilizzano ILogger per tracciare:
- Operazioni CRUD sulle credenziali
- Test di connessione
- Errori e eccezioni
Contributi
Per contribuire al progetto:
- Fork del repository
- Creare un branch per la feature
- Implementare i cambiamenti
- Testare thoroughly
- Creare una Pull Request
Licenza
[Specificare la licenza del progetto]