forked from admin/zeropost-engine
4ec3239dc32fbdc64fd3dd3a482f2d304a617618
Новая архитектура автогенерации (перенос и доработка из ZeroPost):
БД (3 новые таблицы + поля в posts):
channel_categories — категории принадлежат каналу пользователя.
CRUD по slug (уникален в рамках канала), цвет, иконка, sort_order.
category_topics — банк тем с жанровыми маркерами:
[ТУТОРИАЛ][СРАВНЕНИЕ][МНЕНИЕ][ДАЙДЖЕСТ][КЕЙС][НОВОСТЬ]
genre: detected auto или задан явно.
Атомарный захват через UPDATE...FOR UPDATE SKIP LOCKED (нет дублей).
channel_autogen_settings — настройки per-канал:
posts_per_day: 1-20 (пользователь выбирает сам, 3 по умолчанию)
run_hour/run_minute, rotation_mode, last_run_at
best_time_stats — заготовка под аналитику лучшего времени.
posts: +source_topic, +source_category_id, +genre
Ротация (src/services/autogenNew.js):
getTodayCategoryIds: скользящее окно размером posts_per_day.
Если категорий <= posts_per_day — берём все.
Если больше — сдвиг на 1 каждый день (dayOfYear % total).
Пример: 8 категорий, 3 поста/день → каждый день другие 3 категории.
Предпросмотр: GET /api/channels/:id/autogen/rotation?days=7
Фиксы из ZeroPost (не будет тех же ошибок):
pg_advisory_lock по (channel_id, category_id) — нет параллельных дублей
Двойная проверка после lock: уже генерировали сегодня?
Промпт учитывает жанр ([ТУТОРИАЛ] → пошаговый гайд и т.д.)
generateTopicsForCategory: AI генерит N тем с равномерным распределением жанров
API routes:
GET/POST/PATCH/DELETE /api/channels/:id/categories
GET/POST/PATCH/DELETE /api/channels/:id/categories/:catId/topics
POST /api/channels/:id/categories/:catId/topics/generate (AI, async)
GET/POST/PATCH /api/channels/:id/autogen
POST /api/channels/:id/autogen/run
GET /api/channels/:id/autogen/today (черновики за сегодня)
GET /api/channels/:id/autogen/rotation (preview на N дней)
zeropost-engine
ZeroPost - zeropost-engine
Description
Languages
JavaScript
100%