namespace CvSearch.Data.Entities; /// /// Persisted job-board provider configuration. Stored in cvSearch.JobProviders. /// Providers are loaded from here at session-creation time and snapshotted into /// JobSearchSessionEntity.ProviderConfigJson so runtime config changes do not /// affect already-queued sessions. /// public sealed class JobProviderEntity { public int Id { get; set; } /// Display name (e.g. "ejobs.ro"). public string Name { get; set; } = string.Empty; /// When false the provider is skipped at session-creation and the job-search link is hidden. public bool Enabled { get; set; } /// URL template with {keywords} placeholder (URL-encoded keywords are substituted at runtime). public string SearchUrlTemplate { get; set; } = string.Empty; /// Substring that must appear in an anchor href to pass the stage-1 link filter. public string JobLinkContains { get; set; } = string.Empty; /// JSON array of baseline keywords merged with CV keywords before building the search URL. public string InitialKeywordsJson { get; set; } = "[]"; /// Maximum number of job URLs to collect from this provider per session. public int MaxResults { get; set; } = 20; /// Controls display ordering in future admin UIs. public int DisplayOrder { get; set; } /// When true, the scraper renders the page with headless Chromium instead of a plain HTTP GET. public bool UseHeadlessBrowser { get; set; } /// /// When false, the Stage 2 anchor-text keyword filter is skipped. /// Set to false for providers whose search URL already filters by relevance server-side (ejobs.ro, bestjobs.eu). /// public bool RequireKeywordInAnchor { get; set; } = true; }