using System.Data; using Microsoft.EntityFrameworkCore; using TrafagSalesExporter.Models; namespace TrafagSalesExporter.Data; public class AppDbContext : DbContext { public AppDbContext(DbContextOptions options) : base(options) { } public DbSet HanaServers => Set(); public DbSet Sites => Set(); public DbSet SharePointConfigs => Set(); public DbSet ExportSettings => Set(); public DbSet ExportLogs => Set(); /// /// Fügt Spalten zu existierenden Tabellen hinzu, die bei neueren Versionen /// hinzugekommen sind. EnsureCreated aktualisiert das Schema nicht automatisch. /// public static void EnsureSchema(AppDbContext db) { AddColumnIfMissing(db, "HanaServers", "DatabaseName", "TEXT NOT NULL DEFAULT ''"); AddColumnIfMissing(db, "HanaServers", "UseSsl", "INTEGER NOT NULL DEFAULT 0"); AddColumnIfMissing(db, "HanaServers", "ValidateCertificate", "INTEGER NOT NULL DEFAULT 0"); AddColumnIfMissing(db, "HanaServers", "AdditionalParams", "TEXT NOT NULL DEFAULT ''"); } private static void AddColumnIfMissing(AppDbContext db, string table, string column, string type) { var conn = db.Database.GetDbConnection(); if (conn.State != ConnectionState.Open) conn.Open(); bool exists = false; using (var cmd = conn.CreateCommand()) { cmd.CommandText = $"PRAGMA table_info({table})"; using var reader = cmd.ExecuteReader(); while (reader.Read()) { if (string.Equals(reader["name"]?.ToString(), column, StringComparison.OrdinalIgnoreCase)) { exists = true; break; } } } if (!exists) { using var alter = conn.CreateCommand(); alter.CommandText = $"ALTER TABLE {table} ADD COLUMN {column} {type}"; alter.ExecuteNonQuery(); } } public static void SeedIfEmpty(AppDbContext db) { if (db.HanaServers.Any()) return; var serverInternal = new HanaServer { Name = "Internal", Host = "travtrp0", Port = 30015, Username = "", Password = "" }; var serverIndia = new HanaServer { Name = "India", Host = "20.197.20.60", Port = 30015, Username = "", Password = "" }; db.HanaServers.AddRange(serverInternal, serverIndia); db.SaveChanges(); db.Sites.AddRange( new Site { HanaServerId = serverInternal.Id, Schema = "fr01_p", TSC = "TRFR", Land = "Frankreich", IsActive = true }, new Site { HanaServerId = serverInternal.Id, Schema = "it01_p", TSC = "TRIT", Land = "Italien", IsActive = true }, new Site { HanaServerId = serverInternal.Id, Schema = "us01_p", TSC = "TRUS", Land = "USA", IsActive = true }, new Site { HanaServerId = serverIndia.Id, Schema = "TRAFAG_LIVE", TSC = "TRIN", Land = "Indien", IsActive = true } ); db.SharePointConfigs.Add(new SharePointConfig { SiteUrl = "https://trafagag.sharepoint.com/sites/WorldwideBIPlatform", ExportFolder = "/Shared Documents/Exports/", TenantId = "", ClientId = "", ClientSecret = "" }); db.ExportSettings.Add(new ExportSettings { DateFilter = "2025-01-01", TimerHour = 3, TimerMinute = 0, TimerEnabled = true }); db.SaveChanges(); } }