Files
Deal/src/core/Deal.Modules.Discovery/Application/Models/DiscoveryTaskDraft.cs
T
Rustam Khalimov 9e07568ddd Инициализировать репозиторий «Дейл»
Первый коммит: модульный монолит ядра (.NET 10) и gRPC-сервисы
ai/ml/telegram, фронтенд Vue 3/Vite/Tailwind, документация (ТЗ,
инструкция пользователя, техдокументация, код-стайл), бэклог,
скрипты развёртывания и архив прототипа LeadRadar.
2026-09-11 02:50:17 +03:00

59 lines
2.5 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
namespace Deal.Modules.Discovery.Application.Models;
/// <summary>
/// Создание задачи поиска — вход POST /api/discovery/tasks (DiscoveryTaskDraft: поля с дефолтами сервиса).
/// </summary>
/// <remarks>
/// 1:1 с TaskCreate discovery_routes.py L5060 и нормализацией create_task discovery.py L234282: name — строка
/// (обязательная, Trim); description/keywords/minSubscribers/lang/autoJoin имеют дефолты в сервисе;
/// threshold/sampleSize/planJoins — null → дефолты (threshold/sampleSize — из настроек discEvalThreshold/
/// discEvalSample, planJoins — 1). plan_joins дополнительно проходит план-бюджет (DiscoveryPlanGuard).
/// </remarks>
public sealed record DiscoveryTaskDraft
{
/// <summary>
/// Название задачи (после Trim непустое — иначе 400 «Укажите название задачи»).
/// </summary>
public string Name { get; init; } = string.Empty;
/// <summary>
/// Описание ниши/цели (может быть пустым).
/// </summary>
public string Description { get; init; } = string.Empty;
/// <summary>
/// Ключевые слова поиска; null → пустой список (start до добавления ключей — 400).
/// </summary>
public IReadOnlyList<string>? Keywords { get; init; }
/// <summary>
/// Минимальное число участников; null → 0.
/// </summary>
public int? MinSubscribers { get; init; }
/// <summary>
/// Язык источников: ru|any; null/иное → ru.
/// </summary>
public string? Lang { get; init; }
/// <summary>
/// Порог подходящих сообщений, % (кламп 1..100); null → настройка discEvalThreshold.
/// </summary>
public int? Threshold { get; init; }
/// <summary>
/// Размер выборки сообщений при оценке (кламп ≥1); null → настройка discEvalSample.
/// </summary>
public int? SampleSize { get; init; }
/// <summary>
/// План авто-вступлений (1..discJoinLimit + бюджет); null → 1.
/// </summary>
public int? PlanJoins { get; init; }
/// <summary>
/// Авто-вступления воркером; null → false.
/// </summary>
public bool? AutoJoin { get; init; }
}