using System.Drawing; using IBKRTrader.Core.Modules; using IBKRTrader.Core.Workers; using IBKRTrader.Modules.CongressTrading.Database; using IBKRTrader.Modules.CongressTrading.Scraper; using IBKRTrader.Modules.CongressTrading.Workers; using Microsoft.Extensions.DependencyInjection; namespace IBKRTrader.Modules.CongressTrading; /// /// CongressTrading-Modul: kopiert Aktien-Trades von US-Kongressmitgliedern /// (Quelle: capitoltrades.com). /// /// Architektur-Regel: Dieses Modul hängt sich ausschließlich über den /// -Vertrag ein. Der Core kennt dieses Modul NICHT – /// die Abhängigkeit geht nur von Modul → Core. /// public sealed class CongressTradingModule : IModule { public const string ModuleKey = "CT"; public string Key => ModuleKey; public string DisplayName => "Congress Trading"; public string Description => "Kopiert Aktien-Trades von US-Kongressmitgliedern (capitoltrades.com)."; public string Version => "1.0.0"; /// Registriert alle Modul-Services im DI-Container. public void RegisterServices(IServiceCollection services) { // Datenbank services.AddSingleton(); services.AddSingleton(); // Scraper services.AddSingleton(); // Worker services.AddSingleton(); services.AddSingleton(); } /// Führt die Modul-Migrationen aus. public async Task InitializeAsync(IServiceProvider provider) { var migrations = provider.GetRequiredService(); await migrations.RunAsync(); // Einmaliger Reset (deaktiviert): löscht alten Fortschritt für sauberen Neustart. // var repo = provider.GetRequiredService(); // await repo.ResetHistoryImportAsync(); } /// Gibt die Modul-Worker für die WorkerEngine zurück. public IEnumerable GetWorkers(IServiceProvider provider) => [ provider.GetRequiredService(), provider.GetRequiredService() ]; /// /// Erzeugt das Modul-Fenster. Platzhalter – die vollständige UI folgt in Phase 2. /// public Form CreateWindow(IServiceProvider provider) { var form = new Form { Text = $"{DisplayName} ({Key})", Width = 800, Height = 500, StartPosition = FormStartPosition.CenterParent }; form.Controls.Add(new Label { Dock = DockStyle.Fill, TextAlign = ContentAlignment.MiddleCenter, Text = $"{DisplayName}\n\nModul-UI folgt in Phase 2." }); return form; } }