3c08c1a265
- AppSetting gains source config: AutoIngestEnabled, IngestIntervalMinutes, Telegram/Bale/Divar enabled+channels/token/queries - IListingSource.FetchAsync(AppSetting) — sources read config from DB, not IOptions/appsettings; sample source dev-only - IngestionWorker reads AutoIngest+interval from DB each cycle (toggle at runtime, no redeploy) - /Admin/Settings gets a 'منابع جمعآوری' section; removed Ingestion env/appsettings + compose env vars - ENV_FILE shrinks to HOST_PORT + POSTGRES_* + ADMIN_PHONE (AI + sources are all in-admin); migration Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
18 lines
708 B
C#
18 lines
708 B
C#
using JobsMedical.Web.Models;
|
|
|
|
namespace JobsMedical.Web.Services.Scraping;
|
|
|
|
/// <summary>One raw post pulled from a source (a Telegram message, a Divar ad, etc.).</summary>
|
|
public record ScrapedItem(string Source, string RawText, string? SourceUrl = null);
|
|
|
|
/// <summary>
|
|
/// A pluggable source the ingestion engine pulls from. Configuration (enabled, channels, tokens)
|
|
/// comes from the DB-backed <see cref="AppSetting"/> passed in — set in the admin panel, not env.
|
|
/// A disabled/unconfigured source returns an empty list.
|
|
/// </summary>
|
|
public interface IListingSource
|
|
{
|
|
string Name { get; }
|
|
Task<IReadOnlyList<ScrapedItem>> FetchAsync(AppSetting settings, CancellationToken ct = default);
|
|
}
|