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

185 lines
7.0 KiB
Markdown
Raw Permalink 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.
# Рефакторинг Маркетинговой Стратегии - 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
---
### 🎯 Результат
#### **До рефакторинга:**
```json
{
"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 дня
]
}
```
#### **После рефакторинга:**
```json
{
"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` у каждого поста:
```typescript
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 в неделю)
---
### 📝 Компиляция
```bash
cd c:\Users\777\IdeaProjects\telecomBackend
mvnw.cmd compile -DskipTests
```
**BUILD SUCCESS** — все изменения компилируются без ошибок!
---
**Автор:** AI Assistant
**Дата:** 11.04.2026
**Версия:** 2.0