Files
Data-Coupler/GESTIONE_CHIAVE_SORGENTE.md
T
Alessio 51c61eabf7 feat: Implementa gestione intelligente della chiave sorgente con rilevamento PK
- 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
2025-06-28 02:05:59 +02:00

4.9 KiB

Modifiche al Sistema di Gestione Chiave Sorgente

🎯 Obiettivo

Modificare la gestione della chiave sorgente per:

  1. Database: Suggerire automaticamente la Primary Key se rilevata
  2. Altre sorgenti: Obbligare la selezione manuale
  3. 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 database
    • requiresManualKeySelection: 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:

  1. Utente seleziona una tabella
  2. Sistema rileva automaticamente la Primary Key
  3. PK viene suggerita nel dropdown (ma non auto-selezionata)
  4. UI mostra messaggio verde con suggerimento
  5. Utente può scegliere la PK o un altro campo
  6. Se sceglie la PK, riceve conferma positiva

Per Sorgenti File/Altre:

  1. Utente seleziona un foglio/sorgente
  2. Sistema imposta flag per selezione manuale obbligatoria
  3. UI mostra messaggio rosso di obbligo
  4. Dropdown mostra solo "-- Seleziona Campo Chiave --"
  5. Utente DEVE selezionare un campo
  6. 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

  1. Database con PK: Verificare suggerimento automatico
  2. Database senza PK: Verificare selezione manuale obbligatoria
  3. File CSV/Excel: Verificare selezione manuale obbligatoria
  4. Trasferimento: Verificare blocco senza campo chiave
  5. UI: Verificare messaggi e colori appropriati