Files
IBKRTrader/Modules/CongressTrading/CongressTradingModule.cs
T
Richard d0bc833235 @
Phase 2: Launcher-UI + eigenstaendige Modul-Fenster

- Form1 -> LauncherForm (Dateien via git mv, Designer/resx angepasst)
- Modul-Tab: Karten aus ModuleRegistry mit "Fenster oeffnen"-Button je Modul
- UI/WindowManager: Fenster-Tracking (Key->Form), Re-Open fokussiert, CloseAll
- UI/ModuleFormBase: Basisklasse fuer eigenstaendige Modul-Fenster
- CongressTradingForm: DB-Kennzahlen + manueller Scrape-Trigger (Phase-4-Ausbau folgt)
- WindowManager in DI; Launcher schliesst Modul-Fenster beim Beenden
- Tests: WindowManager (6) -> 21/21 gruen; Launcher-Start verifiziert

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@
2026-07-27 10:39:50 +02:00

69 lines
2.6 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using IBKRTrader.Core.Logging;
using IBKRTrader.Core.Modules;
using IBKRTrader.Core.Workers;
using IBKRTrader.Modules.CongressTrading.Database;
using IBKRTrader.Modules.CongressTrading.Scraper;
using IBKRTrader.Modules.CongressTrading.UI;
using IBKRTrader.Modules.CongressTrading.Workers;
using Microsoft.Extensions.DependencyInjection;
namespace IBKRTrader.Modules.CongressTrading;
/// <summary>
/// CongressTrading-Modul: kopiert Aktien-Trades von US-Kongressmitgliedern
/// (Quelle: capitoltrades.com).
///
/// Architektur-Regel: Dieses Modul hängt sich ausschließlich über den
/// <see cref="IModule"/>-Vertrag ein. Der Core kennt dieses Modul NICHT
/// die Abhängigkeit geht nur von Modul → Core.
/// </summary>
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";
/// <summary>Registriert alle Modul-Services im DI-Container.</summary>
public void RegisterServices(IServiceCollection services)
{
// Datenbank
services.AddSingleton<CongressMigrations>();
services.AddSingleton<CongressRepository>();
// Scraper
services.AddSingleton<CapitolTradesScraper>();
// Worker
services.AddSingleton<CongressHistoryImportWorker>();
services.AddSingleton<CongressScrapeWorker>();
}
/// <summary>Führt die Modul-Migrationen aus.</summary>
public async Task InitializeAsync(IServiceProvider provider)
{
var migrations = provider.GetRequiredService<CongressMigrations>();
await migrations.RunAsync();
// Einmaliger Reset (deaktiviert): löscht alten Fortschritt für sauberen Neustart.
// var repo = provider.GetRequiredService<CongressRepository>();
// await repo.ResetHistoryImportAsync();
}
/// <summary>Gibt die Modul-Worker für die WorkerEngine zurück.</summary>
public IEnumerable<IWorker> GetWorkers(IServiceProvider provider) =>
[
provider.GetRequiredService<CongressHistoryImportWorker>(),
provider.GetRequiredService<CongressScrapeWorker>()
];
/// <summary>Erzeugt das eigenständige Modul-Fenster.</summary>
public Form CreateWindow(IServiceProvider provider)
=> new CongressTradingForm(
provider.GetRequiredService<CongressRepository>(),
provider.GetRequiredService<WorkerEngine>(),
provider.GetRequiredService<LoggingService>());
}