Files
marketing-parser/MARKETING_STRATEGY_REFACTORING.md
2026-05-02 17:38:40 +05:00

7.0 KiB
Raw Permalink Blame History

Рефакторинг Маркетинговой Стратегии - Changelog

Дата: 11 апреля 2026

📋 Описание изменений

Полностью переработана логика генерации маркетинговой стратегии для решения проблем:

  • Недостаточное количество постов (было 8, стало 16)
  • Неравномерное распределение постов (пропуски 2-3 дня)
  • Отсутствие связи между постами и неделями
  • Непрофессиональное отображение на фронте

Что изменено

1. Увеличено количество постов: 8 → 16

  • Было: 8 постов за 4 недели (2 поста/неделю)
  • Стало: 16 постов за 4 недели (4 поста/неделю)
  • Распределение: Пн 09:00, Ср 12:00, Пт 18:00, Сб 20:00

2. Добавлено поле weekNumber

  • Model: MarketingStrategy.PostCalendarItem.weekNumber
  • DTO: MarketingStrategyResponse.PostCalendarItem.weekNumber
  • Цель: Чёткая связь каждого поста с конкретной неделей стратегии

3. Нормализация расписания

  • Новый метод: normalizePostSchedule()
  • Автоматически выравнивает посты по дням недели
  • Гарантирует равномерный ритм публикаций
  • Сохраняет валидные даты от AI (если в пределах ±2 дней)

4. Усиленный промпт для AI

  • Чёткие инструкции по распределению 16 постов
  • Примеры правильного JSON с weekNumber
  • Явные требования: 4 поста/неделю, Пн-Ср-Пт-Сб
  • Увеличено количество видео: 2 → 4 (по 1 в неделю)

5. Улучшенная валидация

  • Логирование при < 12 постах от AI
  • Авто-расчёт дат если AI вернул некорректные
  • Нормализация weekNumber для всех постов

📁 Изменённые файлы

  1. MarketingStrategy.java (Model)

    • Добавлено поле weekNumber в PostCalendarItem
  2. MarketingStrategyResponse.java (DTO)

    • Добавлено поле weekNumber в PostCalendarItem
    • Добавлены геттеры/сеттеры + поля videoUrl, videoFilename
  3. MarketingStrategyV3Service.java (Service)

    • Усилен buildUserPrompt() — детальные инструкции по распределению
    • Переписан populateStrategyEntity() — обработка weekNumber
    • Новый метод normalizePostSchedule() — выравнивание расписания
    • Новый метод getDayOffset() — расчёт дней недели
    • Обновлён buildPostCountPlan() — 16 постов вместо 12
    • Увеличен лимит видео: 2 → 4
  4. getStrategyResult()

    • Добавлено поле weekNumber в ответ API

🎯 Результат

До рефакторинга:

{
  "postCalendar": [
    { "publishDate": "2026-04-10T09:00:00", "theme": "Кейс: ..." },
    { "publishDate": "2026-04-12T18:00:00", "theme": "Процесс: ..." },
    { "publishDate": "2026-04-15T12:00:00", "theme": "Отзыв: ..." }
    // ... всего 8 постов, пропуски 2-3 дня
  ]
}

После рефакторинга:

{
  "postCalendar": [
    { 
      "postIndex": 0, 
      "publishDate": "2026-04-13T09:00:00", 
      "weekNumber": 1,
      "platform": "Instagram",
      "contentType": "видео",
      "theme": "Кейс: Как мы увеличили продажи на 40%",
      "publishTime": "09:00"
    },
    { 
      "postIndex": 1, 
      "publishDate": "2026-04-15T12:00:00", 
      "weekNumber": 1,
      "platform": "Instagram",
      "contentType": "фото",
      "theme": "Процесс: За кадром нашей работы",
      "publishTime": "12:00"
    },
    // ... ещё 14 постов, ровно 4 в неделю
  ]
}

📊 Расписание постов (пример)

Неделя День Время Тип контента
1 Понедельник (день 1) 09:00 🎥 Видео (Кейс)
1 Среда (день 3) 12:00 📸 Фото (Процесс)
1 Пятница (день 5) 18:00 📸 Фото (Отзыв)
1 Суббота (день 6) 20:00 📸 Фото (Экспертный)
2 Понедельник (день 8) 09:00 🎥 Видео (Кейс)
2 Среда (день 10) 12:00 📸 Фото (Процесс)
... ... ... ...

🚀 Преимущества

Профессиональный вид — равномерное расписание, как у SMM-агентств
Предсказуемость — клиент знает когда будет каждый пост
Связность — каждый пост привязан к неделе и теме
Гибкость — AI может предлагать даты, но система нормализует
Масштабируемость — легко изменить на 3 или 5 постов/неделю


⚠️ Важно для фронтенда

Теперь в ответе API появляется новое поле weekNumber у каждого поста:

interface PostCalendarItem {
  postIndex: number;
  publishDate: string;
  weekNumber: number;        // ← НОВОЕ ПОЛЕ
  platform: string;
  contentType: string;
  theme: string;
  postText: string;
  hashtags: string[];
  publishTime: string;
  imageUrl?: string;
  videoUrl?: string;
  // ...
}

Рекомендуется использовать weekNumber для группировки постов на фронте!


🧪 Тестирование

После деплоя проверьте:

  1. Генерацию новой стратегии — должно быть 16 постов
  2. Распределение по неделям — по 4 поста в каждой
  3. Даты публикаций — Пн-Ср-Пт-Сб
  4. Поле weekNumber — должно присутствовать у всех постов
  5. Видео-посты — ровно 4 (по 1 в неделю)

📝 Компиляция

cd c:\Users\777\IdeaProjects\telecomBackend
mvnw.cmd compile -DskipTests

BUILD SUCCESS — все изменения компилируются без ошибок!


Автор: AI Assistant
Дата: 11.04.2026
Версия: 2.0