Files
zentral/docs/development/devlog/2025-12-05-230000_live_data_alignment.md

36 lines
2.2 KiB
Markdown

# Live Data Alignment for Report Designer
## Obiettivo
Garantire che i dataset utilizzati nel report designer siano sempre automaticamente allineati con le strutture dati vive del gestionale, leggendo le strutture live invece di affidarsi a dati pre-configurati.
## Modifiche Apportate
### Backend
1. **Nuovo Servizio `SchemaDiscoveryService`**:
* Creato un servizio che scansiona `ZentralDbContext` per trovare tutti i `DbSet` disponibili.
* Genera dinamicamente gli schemi dei dati basandosi sulle proprietà delle entità.
* Supporta il caricamento dinamico delle entità con eager loading delle proprietà di navigazione.
* Include un dizionario di metadati per mantenere descrizioni e icone curate per i dataset principali (Evento, Cliente, ecc.), pur supportando nuovi dataset automaticamente.
2. **Refactoring `ReportsController`**:
* Rimossi i metodi statici hardcoded per la generazione degli schemi (`GetEventoSchema`, ecc.).
* Rimossa la lista hardcoded dei dataset disponibili.
* Integrato `SchemaDiscoveryService` per ottenere la lista dei dataset, gli schemi e i dati.
* Aggiornato `GetVirtualDatasetEntities` per usare il servizio di discovery.
### Miglioramenti UX
1. **Etichette Leggibili**:
* Aggiornato `SchemaDiscoveryService` per rilevare automaticamente la proprietà migliore da usare come etichetta (RagioneSociale, Nome, Descrizione, ecc.).
* Implementato ordinamento alfabetico automatico basato sull'etichetta rilevata.
3. **Refactoring `VirtualDatasetsController`**:
* Rimosso il metodo hardcoded `GetBaseDatasetSchema`.
* Integrato `SchemaDiscoveryService` per la validazione e la generazione degli schemi dei dataset virtuali.
* Risolto un TODO per la determinazione automatica del tipo di campo negli schemi virtuali.
4. **Registrazione Servizio**:
* Registrato `SchemaDiscoveryService` in `Program.cs`.
## Risultato
Il Report Designer ora riflette automaticamente qualsiasi modifica al modello dati (nuove entità, nuovi campi) senza richiedere modifiche manuali al codice del controller. I dataset "core" mantengono le loro descrizioni user-friendly, mentre i nuovi dataset vengono esposti con nomi e descrizioni generati automaticamente.