@page "/standorte" @using Microsoft.EntityFrameworkCore @inject IDbContextFactory DbFactory @inject HanaQueryService HanaQueryService @inject CryptoService CryptoService Standorte Standorte Neuen Standort hinzufügen @foreach (var srv in servers) { @srv.Name } Speichern LandTSCSchemaServerAktivAktion @context.Land @context.TSC @context.Schema @context.HanaServer?.Name @(context.IsActive ? "Ja" : "Nein") Edit Delete @if (editingSite is not null) { Standort bearbeiten @foreach (var srv in servers) { @srv.Name } Update } HANA Server Server speichern NameHostPortUsernameAktion @context.Name @context.Host @context.Port @context.Username Verbindung testen Delete @message @code { private List sites = []; private List servers = []; private Site newSite = new() { IsActive = true }; private Site? editingSite; private HanaServer newServer = new() { Port = 30015 }; private string newServerPassword = string.Empty; private string message = "Bereit."; protected override async Task OnInitializedAsync() => await LoadAsync(); private async Task LoadAsync() { await using var db = await DbFactory.CreateDbContextAsync(); servers = await db.HanaServers.OrderBy(x => x.Name).ToListAsync(); sites = await db.Sites.Include(x => x.HanaServer).OrderBy(x => x.Land).ToListAsync(); if (servers.Count > 0 && newSite.HanaServerId == 0) { newSite.HanaServerId = servers[0].Id; } } private async Task AddSiteAsync() { await using var db = await DbFactory.CreateDbContextAsync(); db.Sites.Add(new Site { HanaServerId = newSite.HanaServerId, Schema = newSite.Schema, TSC = newSite.TSC, Land = newSite.Land, IsActive = newSite.IsActive }); await db.SaveChangesAsync(); newSite = new Site { IsActive = true, HanaServerId = servers.FirstOrDefault()?.Id ?? 0 }; await LoadAsync(); } private void EditSite(Site site) { editingSite = new Site { Id = site.Id, HanaServerId = site.HanaServerId, Schema = site.Schema, TSC = site.TSC, Land = site.Land, IsActive = site.IsActive }; } private async Task SaveSiteAsync() { if (editingSite is null) { return; } await using var db = await DbFactory.CreateDbContextAsync(); var entity = await db.Sites.SingleAsync(x => x.Id == editingSite.Id); entity.HanaServerId = editingSite.HanaServerId; entity.Schema = editingSite.Schema; entity.TSC = editingSite.TSC; entity.Land = editingSite.Land; entity.IsActive = editingSite.IsActive; await db.SaveChangesAsync(); editingSite = null; await LoadAsync(); } private async Task DeleteSiteAsync(int id) { await using var db = await DbFactory.CreateDbContextAsync(); var site = await db.Sites.SingleAsync(x => x.Id == id); db.Sites.Remove(site); await db.SaveChangesAsync(); await LoadAsync(); } private async Task AddServerAsync() { await using var db = await DbFactory.CreateDbContextAsync(); db.HanaServers.Add(new HanaServer { Name = newServer.Name, Host = newServer.Host, Port = newServer.Port, Username = newServer.Username, EncryptedPassword = CryptoService.Encrypt(newServerPassword) }); await db.SaveChangesAsync(); newServer = new HanaServer { Port = 30015 }; newServerPassword = string.Empty; await LoadAsync(); } private async Task DeleteServerAsync(int id) { await using var db = await DbFactory.CreateDbContextAsync(); var isUsed = await db.Sites.AnyAsync(x => x.HanaServerId == id); if (isUsed) { message = "Server kann nicht gelöscht werden, solange Sites darauf zeigen."; return; } var server = await db.HanaServers.SingleAsync(x => x.Id == id); db.HanaServers.Remove(server); await db.SaveChangesAsync(); await LoadAsync(); } private async Task TestServerAsync(HanaServer server) { try { var ok = HanaQueryService.TestConnection(server.Host, server.Port, server.Username, CryptoService.Decrypt(server.EncryptedPassword)); message = ok ? $"Verbindung OK: {server.Name}" : $"Verbindung fehlgeschlagen: {server.Name}"; } catch (Exception ex) { message = $"Verbindung fehlgeschlagen: {ex.Message}"; } await InvokeAsync(StateHasChanged); } }