185 lines
7.0 KiB
Markdown
185 lines
7.0 KiB
Markdown
# Рефакторинг Маркетинговой Стратегии - 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
|