Files
marketing-parser/l.md
2025-12-10 18:58:14 +05:00

4.7 KiB

Я хочу изменить логику формирования Markdown-отчета в методе buildMarkdownFromReport класса MarketingAnalysisService.

Сейчас метод создает Markdown-таблицы (ASCII tables) для отображения данных (сезонность, конкуренты и т.д.). Мне нужно изменить это поведение: вместо таблиц я хочу встраивать JSON-данные для графиков прямо в текст отчета, используя Markdown code blocks.

Требования:

  1. Найди метод buildMarkdownFromReport.
  2. В местах, где сейчас формируются таблицы (например, для "seasonality", "competitors", "audienceSegmentation", "channelsPotential", "conversionFunnel"), замени генерацию таблиц на вставку JSON-блока.
  3. Формат блока должен быть таким:
    { ... json data ... }
    

Где `chart-type` — это идентификатор типа графика (например, `json:seasonality`, `json:competitors`, `json:funnel`). Это поможет фронтенду понять, какой компонент графика рисовать.
4\. Используй поле `objectMapper` для сериализации соответствующих карт/списков (chartsData) в JSON-строку перед вставкой.
5\. Убедись, что JSON отформатирован красиво (pretty print), чтобы он был читаемым, если смотреть на raw text.

**Пример желаемого результата в Markdown:**
Вместо таблицы с месяцами, должно получиться:

### 1️⃣ Сезонность спроса (12 месяцев)

```json:seasonality
{
  "Январь": 70,
  "Февраль": 60,
  ...
}
```

Пожалуйста, рефактори метод `buildMarkdownFromReport` соответствующим образом.


Как это будет работать (для твоего понимания)

После того как Cursor применит изменения, твой метод buildMarkdownFromReport будет выглядеть примерно так (псевдокод):

// Внутри buildMarkdownFromReport

// ... заголовки ...

if (chartsData.containsKey("seasonality")) {
    markdown.append("### 1️⃣ Сезонность спроса (12 месяцев)\n\n");

    // Сериализуем данные в JSON
    String jsonStr = objectMapper.writerWithDefaultPrettyPrinter()
                                 .writeValueAsString(chartsData.get("seasonality"));

    // Вставляем как блок кода с уникальным идентификатором языка
    markdown.append("```json:seasonality\n");
    markdown.append(jsonStr);
    markdown.append("\n```\n\n");
}

Что нужно сделать на Фронтенде?

Так как мы изменили подход, фронтенд (React/Vue) должен использовать библиотеку для рендеринга Markdown (например, react-markdown).

Тебе нужно будет написать кастомный рендерер для элементов code.

Пример логики для фронтенда (React + react-markdown):

import ReactMarkdown from 'react-markdown';
import { SeasonalityChart, FunnelChart } from './MyCharts'; // Твои компоненты графиков

const MarkdownRender = ({ content }) => {
  return (
    <ReactMarkdown
      components={{
        code({ node, inline, className, children, ...props }) {
          const match = /language-(\w+):(\w+)/.exec(className || '');
          // match[1] будет "json", match[2] будет тип графика (seasonality, funnel и т.д.)

          if (!inline && match && match[1] === 'json') {
            const chartType = match[2];
            const data = JSON.parse(String(children).replace(/\n$/, ''));

            switch (chartType) {
              case 'seasonality':
                return <SeasonalityChart data={data} />;
              case 'funnel':
                return <FunnelChart data={data} />;
              default:
                return <pre>{children}</pre>; // Фоллбек
            }
          }

          return (
            <code className={className} {...props}>
              {children}
            </code>
          );
        },
      }}
    >
      {content}
    </ReactMarkdown>
  );
};