feat: Aggiunta gestione nome database sorgente nei profili DataCoupler

 Nuove funzionalità:
- Aggiunto campo SourceDatabaseName nella tabella DataCouplerProfiles
- Implementato recupero automatico del nome database dalle credenziali
- Migliorata applicazione profili con supporto database specifico
- Aggiornata logica di connessione database con selezione database

🔧 Modifiche tecniche:
- Aggiunta migration per colonna SourceDatabaseName
- Estesi modelli DataCouplerProfile e DataCouplerProfileDto
- Aggiornato DataCouplerProfileService per gestire nuovo campo
- Modificato ProfileSaver per recupero automatico database name
- Implementato metodo ConnectToDatabaseWithSpecificDatabase

🐛 Correzioni:
- Migliorata gestione connessioni database multi-database
- Corretta formattazione codice e spaziature
- Rimosse linee vuote eccessive nel codice sorgente

🧪
This commit is contained in:
2025-07-05 18:10:09 +02:00
parent 65ed2bb93a
commit 7d2961702c
21 changed files with 1002 additions and 367 deletions
+62
View File
@@ -0,0 +1,62 @@
using CredentialManager.Data;
using CredentialManager.Models;
using CredentialManager.Services;
using Microsoft.EntityFrameworkCore;
Console.WriteLine("🧪 Testing SourceDatabaseName database persistence...");
// Configurazione del database temporaneo
var options = new DbContextOptionsBuilder<CredentialDbContext>()
.UseSqlite("Data Source=test_sourcedatabase.db")
.Options;
using var context = new CredentialDbContext(options);
await context.Database.EnsureCreatedAsync();
var profileService = new DataCouplerProfileService(context);
// Test: Creazione e salvataggio di un profilo con SourceDatabaseName
var testProfile = new DataCouplerProfile
{
Name = "Test Profile DB",
Description = "Test per verificare il salvataggio del SourceDatabaseName",
SourceType = "database",
SourceDatabaseName = "MyProductionDatabase",
SourceSchema = "dbo",
SourceTable = "customers",
DestinationType = "rest",
DestinationEndpoint = "/api/customers",
CreatedBy = "TestUser"
};
Console.WriteLine($"📝 Creando profilo con SourceDatabaseName: {testProfile.SourceDatabaseName}");
// Salvataggio nel database
var savedProfile = await profileService.SaveProfileAsync(testProfile);
Console.WriteLine($"✅ Profilo salvato con ID: {savedProfile.Id}");
// Recupero dal database
var retrievedProfile = await profileService.GetProfileByIdAsync(savedProfile.Id);
Console.WriteLine($"✅ Profilo recuperato dal database");
// Verifica che il SourceDatabaseName sia stato salvato e recuperato correttamente
if (retrievedProfile != null && retrievedProfile.SourceDatabaseName == testProfile.SourceDatabaseName)
{
Console.WriteLine($"✅ SUCCESSO: SourceDatabaseName salvato e recuperato correttamente: {retrievedProfile.SourceDatabaseName}");
}
else
{
Console.WriteLine($"❌ ERRORE: SourceDatabaseName non salvato correttamente");
Console.WriteLine($" Originale: {testProfile.SourceDatabaseName}");
Console.WriteLine($" Recuperato: {retrievedProfile?.SourceDatabaseName ?? "NULL"}");
}
// Test conversione DTO
var dto = profileService.ToDto(retrievedProfile!);
Console.WriteLine($"✅ DTO convertito con SourceDatabaseName: {dto.SourceDatabaseName}");
// Pulizia
await context.Database.EnsureDeletedAsync();
Console.WriteLine("🧹 Database temporaneo eliminato");
Console.WriteLine("\n🎯 Test completato con successo!");