Move ingestion + Telegram/Bale/Divar config to DB-backed admin settings
- 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>
This commit is contained in:
@@ -32,8 +32,31 @@ public class AppSetting
|
||||
/// <summary>If AI approves AND Mode is Automatic, publish without human review.</summary>
|
||||
public bool AiAutoApprove { get; set; } = false;
|
||||
|
||||
// --- Channel scraping sources (configured here, NOT in env) ---
|
||||
/// <summary>Run the ingestion worker on a timer.</summary>
|
||||
public bool AutoIngestEnabled { get; set; } = false;
|
||||
public int IngestIntervalMinutes { get; set; } = 30;
|
||||
|
||||
public bool TelegramEnabled { get; set; } = false;
|
||||
/// <summary>Public Telegram channel usernames, one per line or comma-separated.</summary>
|
||||
[MaxLength(2000)] public string? TelegramChannels { get; set; }
|
||||
|
||||
public bool BaleEnabled { get; set; } = false;
|
||||
[MaxLength(200)] public string? BaleBotToken { get; set; }
|
||||
|
||||
public bool DivarEnabled { get; set; } = false;
|
||||
[MaxLength(60)] public string? DivarCity { get; set; } = "tehran";
|
||||
/// <summary>Divar search terms, one per line or comma-separated.</summary>
|
||||
[MaxLength(2000)] public string? DivarQueries { get; set; }
|
||||
|
||||
public DateTime UpdatedAt { get; set; } = DateTime.UtcNow;
|
||||
|
||||
/// <summary>Split a textarea (newline/comma separated) into trimmed non-empty items.</summary>
|
||||
public static List<string> SplitList(string? s) => string.IsNullOrWhiteSpace(s)
|
||||
? new()
|
||||
: s.Split(new[] { '\n', '\r', ',', '،' }, StringSplitOptions.RemoveEmptyEntries | StringSplitOptions.TrimEntries)
|
||||
.ToList();
|
||||
|
||||
public const string DefaultPrompt = """
|
||||
تو دستیار بررسی آگهیهای کاری حوزه درمان برای پلتفرم «همکادر» هستی.
|
||||
هر آگهی خام را بخوان و تصمیم بگیر:
|
||||
|
||||
Reference in New Issue
Block a user