target fix

This commit is contained in:
arys
2026-05-02 17:38:40 +05:00
parent 6f3421205a
commit 797997d548
18 changed files with 1308 additions and 44 deletions
+184
View File
@@ -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