335d587c89
- Salesforce Composite Batch API per describe SObject: le describe sono ora raggruppate in chunk da 25 e inviate come singole POST a /composite/batch, riducendo le chiamate API da N a ceil(N/25); per 200 SObject: da 201 a 9 chiamate. - Discovery entita' REST in parallelo: DiscoverEntitySummariesAsync e DiscoverEntitiesAsync avviate simultaneamente; la lista entita' diventa interattiva subito dopo le summaries, i dettagli completano in background con StateHasChanged() per aggiornare l'UI istantaneamente. - Fix scheduler - preservazione ExternalIdRelationshipsJson e DefaultValuesJson: in DataCoupler.razor.cs entrambi i blocchi di update profilo esistente (riattivazione profilo inattivo e sovrascrittura profilo attivo) omettevano questi campi nella copia, causandone l'azzeramento silenzioso ad ogni re-salvataggio. Ora entrambi i percorsi propagano correttamente i campi JSON. - Fix scheduler - esclusione campi sorgente External ID dal mapping normale: in ScheduledProfileExecutionService.TransformRecordForRest i campi sorgente usati nelle External ID Relationships venivano inclusi anche nel loop di field mapping standard, generando dati duplicati nell'entita' destinazione. Ora il comportamento e' allineato alla UI manuale (TransformRecordToRestEntity). - Aggiornata documentazione: README.md, AGENTS.md, copilot-instructions.md
278 lines
9.6 KiB
Markdown
278 lines
9.6 KiB
Markdown
# 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**: `DiscoverEntitySummariesAsync` e `DiscoverEntitiesAsync` vengono 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 — `ExternalIdRelationshipsJson` e `DefaultValuesJson` venivano 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:
|
|
|
|
```csharp
|
|
// Add CredentialManager services
|
|
builder.Services.AddDataConnectionCredentialManagement("Data Source=wwwroot/data/credentials.db");
|
|
```
|
|
|
|
## Utilizzo
|
|
|
|
### Gestione Credenziali via Web Interface
|
|
|
|
1. Avviare l'applicazione Data_Coupler
|
|
2. Navigare su `/credentials`
|
|
3. Utilizzare l'interfaccia per:
|
|
- Aggiungere nuove credenziali (Database/REST API)
|
|
- Modificare credenziali esistenti
|
|
- Testare le connessioni
|
|
- Eliminare credenziali
|
|
|
|
### Utilizzo Programmatico
|
|
|
|
```csharp
|
|
// 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
|
|
```bash
|
|
dotnet build Data_Coupler.sln
|
|
```
|
|
|
|
### Esecuzione Locale
|
|
```bash
|
|
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:**
|
|
```bash
|
|
# 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:**
|
|
```bash
|
|
# 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](DOCKER_DEPLOYMENT.md) e [GITHUB_ACTIONS_SETUP.md](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):
|
|
```bash
|
|
# 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](.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:
|
|
1. Fork del repository
|
|
2. Creare un branch per la feature
|
|
3. Implementare i cambiamenti
|
|
4. Testare thoroughly
|
|
5. Creare una Pull Request
|
|
|
|
## Licenza
|
|
|
|
[Specificare la licenza del progetto] |