target fix
This commit is contained in:
@@ -0,0 +1,184 @@
|
||||
# Рефакторинг Маркетинговой Стратегии - 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
|
||||
Reference in New Issue
Block a user