### Техническое задание (Версия 2.0): Интеграция AI-аналитики в `parser-service`

**Задача:** Модифицировать существующий `parser-service` для обогащения новостей аналитическими данными (саммари, теги, тональность) **в момент парсинга**, перед сохранением в базу данных.

**Контекст:** Мы отказываемся от создания отдельного `analytics-service` в пользу более простой, монолитной архитектуры. Аналитика должна стать неотъемлемой частью процесса парсинга. Каждая новость, попадающая в базу данных, должна уже содержать сгенерированные AI-данные.

---

## 1\. Архитектурные изменения

- **Никаких новых сервисов.** Вся логика реализуется внутри существующего `parser-service`.
- **Синхронный процесс:** Новый воркфлоу для каждой новости: **Парсинг -\> Аналитика -\> Сохранение в MongoDB**.
- **Новый компонент:** Внутри `parser-service` необходимо создать новый сервис/компонент (например, `OllamaAnalyticsService`), который будет отвечать за все взаимодействия с API Ollama.

---

## 2\. Основные требования

### 2.1. Создание `OllamaAnalyticsService`

В проекте `parser-service` создайте новый сервис, который будет инкапсулировать логику общения с Ollama.

- **Взаимодействие с API Ollama:**
  - **Хост:** `http://185.35.223.45:11434`
  - **Модель:** `gemma3:1b`
  - **Клиент:** Использовать `WebClient` для HTTP-запросов к эндпоинту `/api/generate`.
- **Основной метод:** У сервиса должен быть публичный метод, например `Analytics analyzeText(String text)`, который принимает сырой текст статьи и возвращает готовый объект `Analytics` со всеми заполненными полями.

### 2.2. Модификация существующих парсеров

Необходимо изменить логику **каждого** существующего парсера (`KursivParserService`, `KapitalParserService` и т.д.).

**Новый алгоритм работы для метода `parseAndSaveRssFeed()`:**

1.  Получить и разобрать данные из RSS-ленты.
2.  Для каждой новости, после извлечения `raw_text`, **вызвать** метод `analyzeText` из нового `OllamaAnalyticsService`.
3.  Получить в ответ заполненный объект `Analytics`.
4.  Установить этот объект в поле `analytics` у сущности `MarketItem`.
5.  **Только после этого** сохранить полностью обогащенный `MarketItem` в MongoDB.

**Примерный псевдокод для `KursivParserService`:**

```java
@Service
public class KursivParserService implements ParserService {

    @Autowired
    private OllamaAnalyticsService analyticsService; // Новый сервис
    @Autowired
    private MarketItemRepository repository;

    @Override
    public List<MarketItem> parseAndSaveRssFeed() {
        // ... логика получения данных из RSS ...

        for (RssItem rssItem : feedItems) {
            MarketItem marketItem = new MarketItem();
            marketItem.setTitle(rssItem.getTitle());
            marketItem.setRawText(rssItem.getText());
            // ... установить остальные поля ...

            // === НОВЫЙ ШАГ ===
            // Вызываем аналитику ПЕРЕД сохранением
            Analytics analyticsData = analyticsService.analyzeText(rssItem.getText());
            marketItem.setAnalytics(analyticsData);
            // ==================

            // Сохраняем уже обогащенный объект
            repository.save(marketItem);
        }
        // ... вернуть результат ...
    }
}
```

### 2.3. Промпты для Ollama

Используйте следующие промпты для каждой аналитической задачи внутри `OllamaAnalyticsService`:

- **Саммари:** `Напиши краткое саммари следующей новостной статьи на русском языке. Ответ должен содержать только саммари из 3-4 предложений, без лишних вступлений. Статья: [Текст статьи]`
- **Теги:** `Извлеки 5-7 ключевых слов или тегов из текста новостной статьи. В ответе дай только список тегов через запятую, без нумерации и заголовков. Статья: [Текст статьи]`
- **Тональность:** `Определи тональность текста новостной статьи. В ответе дай только одно слово латиницей: positive, negative или neutral. Статья: [Текст статьи]`
- **Сущности (JSON):** `Извлеки из текста имена людей, названия компаний и географические локации. В ответе дай только JSON объект следующей структуры: {"persons": [], "companies": [], "locations": []}. Статья: [Текст статьи]`

---

## Критерии выполнения

- Новый сервис `OllamaAnalyticsService` создан внутри проекта `parser-service`.
- Существующие парсеры (`KursivParserService` и др.) модифицированы для вызова `OllamaAnalyticsService` перед сохранением данных.
- Все новые записи, сохраняемые в MongoDB, **сразу содержат** заполненное поле `analytics`.
- Процесс парсинга теперь может занимать больше времени, это ожидаемое поведение.
- Реализована базовая обработка ошибок (например, если Ollama недоступен, поле `analytics` остается пустым, но парсинг не прерывается).
