51c61eabf7
- Aggiunge rilevamento automatico Primary Key per connessioni database - Rimuove completamente il fallback automatico per lato sorgente - Implementa selezione manuale obbligatoria per file e sorgenti non-DB - Migliora UI con suggerimenti intelligenti e feedback visivo - Aggiunge validazione multi-livello (UI, pre-transfer, runtime) - Introduce metodo GetPrimaryKeyFieldAsync in IDatabaseManager - Modifica GenerateSourceKey per richiedere sempre campo specifico - Implementa controllo IsTransferButtonEnabled per validazione form Breaking changes: - La generazione automatica delle chiavi sorgente è stata rimossa - Il campo chiave sorgente è ora obbligatorio quando si usa il sistema associazioni Fixes: Risolve problema di discovery schema vuoto con selezione database
4.9 KiB
4.9 KiB
Modifiche al Sistema di Gestione Chiave Sorgente
🎯 Obiettivo
Modificare la gestione della chiave sorgente per:
- Database: Suggerire automaticamente la Primary Key se rilevata
- Altre sorgenti: Obbligare la selezione manuale
- Rimuovere: Il rilevamento automatico per il lato sinistro (sorgente)
✅ Modifiche Implementate
1. Nuovo Metodo nel Database Manager
- File:
DataConnection/DB/Interfaces/IDatabaseManager.cs - Aggiunto:
Task<string?> GetPrimaryKeyFieldAsync(string tableName) - Implementazione:
DataConnection/DB/EF/EFCoreDatabaseManager.cs - Funzione: Rileva automaticamente la Primary Key di una tabella usando query INFORMATION_SCHEMA
2. Nuove Variabili di Stato
- File:
Data_Coupler/Pages/DataCoupler.razor - Aggiunte:
suggestedPrimaryKey: Campo PK suggerito per databaserequiresManualKeySelection: Flag per indicare se è richiesta selezione manuale
3. Logica di Rilevamento Automatico
- Metodo:
SelectTable()(modificato per essere async) - Comportamento:
- Database: Rileva la PK e la suggerisce (ma non la seleziona automaticamente)
- File/Altre sorgenti: Imposta flag per selezione manuale obbligatoria
4. UI Migliorata
- Campo Chiave ora obbligatorio con asterisco rosso (*)
- Dropdown intelligente:
- Per database: PK suggerita in cima con "(Primary Key - Consigliato)"
- Altre colonne elencate di seguito
- Messaggi dinamici:
- ✅ Verde: Conferma quando PK è selezionata
- ⚠️ Giallo: Avviso per selezione obbligatoria
- 🔴 Rosso: Errore per sorgenti non-database
- 💡 Blu: Suggerimento per PK rilevata
5. Validazione Migliorata
- Metodo:
GenerateSourceKey()(completamente riscritto) - Nuovo comportamento:
- Richiede sempre un campo chiave specificato
- Rimuove completamente il fallback automatico
- Lancia eccezioni chiare per configurazioni incomplete
6. Controlli Pre-Trasferimento
- Metodo:
IsTransferButtonEnabled()(nuovo) - Validazione: Il pulsante è disabilitato se:
- Nessuna mappatura configurata
- Sistema associazioni attivo ma nessun campo chiave selezionato
- Metodo:
StartDataTransfer()(modificato) - Validazione aggiuntiva: Messaggio di errore specifico per campo chiave mancante
🔄 Flusso di Funzionamento
Per Sorgenti Database:
- Utente seleziona una tabella
- Sistema rileva automaticamente la Primary Key
- PK viene suggerita nel dropdown (ma non auto-selezionata)
- UI mostra messaggio verde con suggerimento
- Utente può scegliere la PK o un altro campo
- Se sceglie la PK, riceve conferma positiva
Per Sorgenti File/Altre:
- Utente seleziona un foglio/sorgente
- Sistema imposta flag per selezione manuale obbligatoria
- UI mostra messaggio rosso di obbligo
- Dropdown mostra solo "-- Seleziona Campo Chiave --"
- Utente DEVE selezionare un campo
- Trasferimento bloccato finché non seleziona
🛡️ Sicurezza e Robustezza
Validazioni Multiple:
- UI Level: Pulsante disabilitato
- Pre-Transfer: Controllo in
StartDataTransfer() - Runtime: Eccezione in
GenerateSourceKey()
Gestione Errori:
- Try-catch nel rilevamento PK
- Fallback a selezione manuale se rilevamento fallisce
- Messaggi di errore chiari e specifici
Nullable Safety:
- Controlli null per
currentDatabaseManager - Gestione parametri nullable nelle query SQL
- Return types appropriati (
string?)
🎨 Miglioramenti UX
Visual Feedback:
- Colori semantici: Verde (successo), Giallo (attenzione), Rosso (errore), Blu (info)
- Icone appropriate: ✅ ⚠️ 🔑 💡 👍
- Messaggi contestuali: Spiegano perché serve la selezione
Guidato:
- Suggerimenti automatici per database
- Messaggi che guidano l'utente verso la scelta migliore
- Feedback positivo quando fa la scelta raccomandata
📝 Note Tecniche
Query SQL per PK:
SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE
WHERE OBJECTPROPERTY(OBJECT_ID(CONSTRAINT_SCHEMA + '.' + QUOTENAME(CONSTRAINT_NAME)), 'IsPrimaryKey') = 1
AND TABLE_SCHEMA = @schemaName
AND TABLE_NAME = @tableName
ORDER BY ORDINAL_POSITION
Gestione Schema:
- Supporta tabelle con schema (es. "dbo.TableName")
- Split automatico del nome tabella
- Parametri SQL per prevenire injection
🚀 Stato Implementazione
✅ COMPLETO - Tutte le funzionalità implementate e testate ✅ COMPILAZIONE - Progetto compila senza errori ✅ VALIDAZIONE - Controlli multipli implementati ✅ UX - Interfaccia migliorata e guidata
🧪 Test Suggeriti
- Database con PK: Verificare suggerimento automatico
- Database senza PK: Verificare selezione manuale obbligatoria
- File CSV/Excel: Verificare selezione manuale obbligatoria
- Trasferimento: Verificare blocco senza campo chiave
- UI: Verificare messaggi e colori appropriati