namespace Deal.Modules.Settings.Application.Models;
///
/// Публичный снимок настроек тенанта — тело ответа GET/PATCH /api/settings.
///
public sealed record PublicSettingsDto
{
///
/// Авто-архивация выполненных/отклонённых карточек.
///
public bool AutoArchive { get; init; }
///
/// Дней до авто-архивации карточки
///
public int ArchiveAfterDays { get; init; }
///
/// Дней хранения в архиве до очистки.
///
public int ArchiveClearDays { get; init; }
///
/// Дней хранения в корзине до очистки.
///
public int TrashClearDays { get; init; }
///
/// Минимальная длина сообщения для -1 фильтра
///
public int MinLen { get; init; }
///
/// Стоп-фразы -1 фильтра.
///
public IReadOnlyList StopPhrases { get; init; } = Array.Empty();
///
/// Локальный ML-слой включён.
///
public bool MlEnabled { get; init; }
///
/// Полный выключатель ИИ
///
public bool AiEnabled { get; init; }
///
/// ИИ-фильтр (страж) входящих включён.
///
public bool AiFilterEnabled { get; init; }
///
/// Промпт классификатора входящих
///
public string AiPrompt { get; init; } = string.Empty;
///
/// Промпт ИИ-фильтра входящих.
///
public string AiFilterPrompt { get; init; } = string.Empty;
///
/// Промпт структуры карточки
///
public string CardPrompt { get; init; } = string.Empty;
///
/// Тип собираемых заявок
///
public string WantedType { get; init; } = string.Empty;
///
/// Без указания суммы не создавать карточку найма.
///
public bool BudgetRequiredHire { get; init; }
///
/// Без указания суммы не создавать карточку заказа.
///
public bool BudgetRequiredOrder { get; init; }
///
/// Подпись найма на карточке.
///
public string HireLabel { get; init; } = string.Empty;
///
/// Подпись разового заказа на карточке.
///
public string OrderLabel { get; init; } = string.Empty;
///
/// Описание сферы
///
public string DomainDescription { get; init; } = string.Empty;
///
/// Общие слова-маркеры заявок сферы.
///
public IReadOnlyList DomainKeywords { get; init; } = Array.Empty();
///
/// Маркеры найма
///
public IReadOnlyList HireMarkers { get; init; } = Array.Empty();
///
/// Термины грейдов/уровней.
///
public IReadOnlyList LevelTerms { get; init; } = Array.Empty();
///
/// Маркеры резюме соискателей.
///
public IReadOnlyList ResumeMarkers { get; init; } = Array.Empty();
///
/// Отсекать резюме соискателей на.
///
public bool BlockResumes { get; init; }
///
/// Глобальные исключения по ключевым словам/фразам/технологиям
///
public IReadOnlyList ExcludeKeywords { get; init; } = Array.Empty();
///
/// Глобальные исключения по локации/языку
///
public IReadOnlyList ExcludeLocations { get; init; } = Array.Empty();
///
/// Глобальные исключения по типу заявки
///
public IReadOnlyList ExcludeTypes { get; init; } = Array.Empty();
///
/// Нижняя граница глобального исключения по бюджету
///
public int ExcludeBudgetFrom { get; init; }
///
/// Верхняя граница глобального исключения по бюджету
///
public int ExcludeBudgetTo { get; init; }
///
/// Личная библиотека промптов пользователя.
///
public IReadOnlyList MyPrompts { get; init; } = Array.Empty();
///
/// Общие напоминания включены.
///
public bool RemindersEnabled { get; init; }
///
/// Конвертация бюджетов карточек включена.
///
public bool ConversionOn { get; init; }
///
/// Целевая валюта конвертации.
///
public string TargetCurrency { get; init; } = string.Empty;
///
/// Источник курсов
///
public string RateSource { get; init; } = string.Empty;
///
/// Авто-мониторинг новых чатов/каналов.
///
public bool AutoMonitorNew { get; init; }
///
/// Суточный лимит авто-вступлений Discovery
///
public int DiscJoinLimit { get; init; }
///
/// Нижняя граница паузы между авто-вступлениями, сек
///
public int DiscJoinDelayMin { get; init; }
///
/// Верхняя граница паузы между авто-вступлениями, сек
///
public int DiscJoinDelayMax { get; init; }
///
/// Размер выборки сообщений при оценке канала
///
public int DiscEvalSample { get; init; }
///
/// Процент подходящих сообщений для оценки канала
///
public int DiscEvalThreshold { get; init; }
///
/// Стоп-кран авто-вступлений Discovery.
///
public bool DiscPaused { get; init; }
///
/// Состояние колонок канбана.
///
public IReadOnlyDictionary ColState { get; init; } =
new Dictionary();
}