feat(news): add scraper adapters, article deduplication, blocklist service, and remove tracked publish artifacts
This commit is contained in:
+22
-9
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user