feat(news): add scraper adapters, article deduplication, blocklist service, and remove tracked publish artifacts

This commit is contained in:
2026-08-24 21:35:33 +02:00
parent 44b161d509
commit 8112598602
400 changed files with 1812 additions and 113367 deletions
+22 -9
View File
@@ -7,6 +7,8 @@ using FinlyticNews.Adapters.Discovery;
using FinlyticNews.Adapters.Scraping;
using FinlyticNews.Entities;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
var builder = Host.CreateApplicationBuilder(args);
@@ -27,13 +29,28 @@ builder.Services.AddSingleton<ArticleDiscoveryAdapter, FinanznachrichtenRssDisco
// Register Detail Scraper Adapters
builder.Services.AddSingleton<ArticleScraperAdapter, FinanznachrichtenScraperAdapter>();
builder.Services.AddSingleton<ArticleScraperAdapter, ArivaScraperAdapter>();
builder.Services.AddSingleton<ArticleScraperAdapter, DerAktionaerScraperAdapter>();
builder.Services.AddSingleton<ArticleScraperAdapter, ItTimesScraperAdapter>();
builder.Services.AddSingleton<ArticleScraperAdapter, MoneycabScraperAdapter>();
builder.Services.AddSingleton<ArticleScraperAdapter, T3nScraperAdapter>();
builder.Services.AddSingleton<ArticleScraperAdapter, LynxBrokerScraperAdapter>();
builder.Services.AddSingleton<ArticleScraperAdapter, Ntg24ScraperAdapter>();
builder.Services.AddSingleton<ArticleScraperAdapter, SharedealsScraperAdapter>();
builder.Services.AddSingleton<ArticleScraperAdapter, XtbScraperAdapter>();
// Register Service interfaces and implementations
// Register Non-AI Matching, Validation, Deduplication, and Blocklist Services
builder.Services.AddSingleton<INewsBlocklistService, NewsBlocklistService>();
builder.Services.AddSingleton<IArticleDeduplicationService, ArticleDeduplicationService>();
builder.Services.AddSingleton<AssetMatcherService>();
builder.Services.AddSingleton<IAssetMatcherService>(sp => sp.GetRequiredService<AssetMatcherService>());
builder.Services.AddHostedService(sp => sp.GetRequiredService<AssetMatcherService>());
builder.Services.AddSingleton<IAssetValidationService, AssetValidationService>();
// Register Scraper and DB Services
builder.Services.AddScoped<IArticleDiscoveryService, ArticleDiscoveryService>();
builder.Services.AddScoped<IPlaywrightScraperService, PlaywrightScraperService>();
builder.Services.AddScoped<IN8nService, N8nService>();
builder.Services.AddScoped<INewsDbService, NewsDbService>();
builder.Services.AddScoped<ISettingsDbService, SettingsDbService>();
// Register MQTT Client (as singleton hosted service)
builder.Services.AddSingleton<NewsMqttClient>();
@@ -50,12 +67,8 @@ using (var scope = host.Services.CreateScope())
try
{
var context = scope.ServiceProvider.GetRequiredService<NewsDbContext>();
await context.Database.MigrateAsync();
// Ensure default settings exist in DB
var settingsService = scope.ServiceProvider.GetRequiredService<ISettingsDbService>();
await settingsService.GetSettingsAsync();
var connStr = builder.Configuration.GetConnectionString("DefaultConnection") ?? "";
await context.MigrateWithBootstrapAsync(connStr);
// Seed default article source if empty